跨平台编译工具cmake的简单使用
2023-08-14 23:55:47 来源:玩转单片机
在使用不同平台的电脑时,使用的编译也会不一样,如果想把一个项目在不同平台下编译,那有什么方式可以实现这样的需求呢,这就是这篇文章就来介绍其中的一种方式,就是使用cmake,cmake 并不直接建构出最终的软件,而是产生标准的建构档,然后再借助编译工具来构建。
| 环境搭建
在windows可以使用cmake+vscode+mingw配合使用构建,还需要把mingw32-make.exe,复制一份,将其中一份重命名为make.exe,以实现在不同平台下可以直接使用make指令。在ubuntu中可以使用cmake+vscode+gcc来构建,ubuntu一般会自带gcc。vscode需要安装几个相关插件:
(相关资料图)
C/C++CMakeCMakeTools
可以通过cmake --version 来查看是否安装成功,相关的安装直接百度以下就可以;注意不同平台下使用的命令可能会有差别,笔者使用的是ubuntu系统来操作。
| 简单使用
同目录单文件
1、先看文件树
main.c源码文件
#include"stdio.h"intmain(){printf("ok");return0;}
CMakeLists.txt配置文件
#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#指定生成目标add_executable(Demomain.c)
2、构建Makefile文件
创建好文件夹后,再进入build文件夹, 使用 cmake .. 命令构建Makefile文件:
3、通过gcc编译
在Makefile同级目录下使用 make 命令编译,就会生成一个可执行文件Demo文件:
4、执行可执行文件
同目录多文件
1、编写文件
在上边的基础上,把生成的文件删除,再添加两个文件:
main.c源码文件
#include"stdio.h"#include"hello.h"intmain(){printf("ok");hello();return0;}
hello.c源码文件
#include"hello.h"voidhello(void){printf("hello");}
hello.h源码文件
#ifndef__HELLO__#define__HELLO__#include"stdio.h"voidhello(void);#endif
CMakeLists.txt配置文件(使用方式二):
方式一:通过手动指定源码文件
#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#指定生成目标add_executable(Demomain.chello.c)
方式二:查找当前目录下的所有源文件
#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#查找当前目录下的所有源文件#并将名称保存到DIR_SRCS变量aux_source_directory(.DIR_SRCS)#指定生成目标(自动查找)add_executable(Demo${DIR_SRCS})
2、构建Makefile文件
3、生成可执行文件
不同目录多文件
不同目录下的处理,就是把文件编译成库,再在对应位置链接进去。
1、先看文件树
main.c 和 hello.c 和hello.h都可同目录多文件案例源码一样。
顶层的CMakeLists.txt配置:
#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo3)#查找当前目录下的所有源文件#并将名称保存到DIR_SRCS变量aux_source_directory(.DIR_SRCS)#添加hello子目录add_subdirectory(hello)#指定生成目标add_executable(Demomain.c)#添加链接库target_link_libraries(DemoHelloFunctions)
hello文件夹中的CMakeLists.txt配置:
#查找当前目录下的所有源文件#并将名称保存到DIR_LIB_SRCS变量aux_source_directory(.DIR_LIB_SRCS)#生成链接库add_library(HelloFunctions${DIR_LIB_SRCS})
2、构建Makefile文件
3、生成可执行文件
文件的路径一定要是写对,不然编译会出问题:
正确的写法如下:
执行可执行文件:
这就是cmake的简单用法,可以根据自己需求进行深入学习。
审核编辑:汤梓红
关键词:
推荐内容
- 跨平台编译工具cmake的简单使用
- 泰国海啸警报(海啸蓝色警报)
- 62岁张学友演唱会摔倒,本人回应身体状况,却被嘲
- 辽宁:原拟7月起执行的“辅助生殖入医保”还需进
- MSCI中国指数最新调整结果公布 中国重汽(3808.H
- 官方:前八一&青岛内线张祖铭加盟宁波富邦 将身
- 河南扶沟:爱老助老有温情 便民惠民暖人心
- 张之臻三连败19岁小将 北美赛季中国男网喜忧参半
- 西安山洪泥石流灾害原因初步查明
- 国乒遗憾未参赛,韩国连夺3冠表现突出!日本1金1
- 天蓝水黾快速获得 天蓝水黾缰绳怎么获得
- 日媒曝美日将共同研发新型反导拦截弹,借口又是中
- 玉溪市全力推动婴幼儿照护服务高质量发展
- 绕口令八百标兵奔北坡图片(绕口令八百标兵奔北坡
- 春秋常服党徽佩戴位置(党徽佩戴位置)
- 金博股份:目前公司研发的Ⅳ型储氢瓶正在开展试制
- 紫罗兰玉镯的功效和作用
- 路维光电2023年上半年净利7063.13万 同比增加53.28%
- 2亿签字费+踢兄弟足球!足坛新王反悔,皇马失望1
- 邹城市开展餐饮油烟治理“回头看”活动
- 涉嫌严重职务违法!三明一干部被查!
- 缅泰边境贸易公路实施限行管控
- 游客在黄山拍到珍稀动物云豹?专家初步判断是大橘
- 壶关:5座小车“挤”8人
- 恒大“双子塔”,消失在蓝图里
- 内马尔加盟利雅得新月只差体检 巴黎转1亿欧他赚1
- 微医廖杰远:“数字健共体”帮助百万基层医疗机构
- 全责!小伙为炫朋友圈无证试驾新车,结果……
- 恒瑞医药:将SHR-1905注射液项目有偿许可给美国One Bio
- 英媒:英国通胀率8月或将反弹 首相承诺恐难兑现
- 市场监管总局:持续优化营商环境 多种措施服务外
- 上海建科涨停,上榜营业部合计净买入2017.72万元
- 九月桃花神悄无声息出现,冥冥之中指点你遇到真爱
- 新基金的封闭期有多长 新基金封闭期有收益吗
- 小型堆稳步推进 中国在核能领域的三个“最先进”
- AI潮涌,这门生意爆了
- 国寿鑫颐宝两全保险 用多重保障传递爱与责任
- 花10块钱,在杭州市中心的山上喝了一天茶
- 祝贺,“五天三箭九星”!
- 爱心暑托班护航800余名青少年快乐成长