跨平台编译工具cmake的简单使用
在使用不同平台的电脑时,使用的编译也会不一样,如果想把一个项目在不同平台下编译,那有什么方式可以实现这样的需求呢,这就是这篇文章就来介绍其中的一种方式,就是使用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的简单使用2023-08-14
- 雨水浸泡过的物品,如何消毒处置?2023-08-14
- 闭环监管严防“跑冒滴漏” 怀化确保惠农补2023-08-14
- 14个设区市都有精彩好戏2023-08-14
- 金达威:公司体重管理辅助产品可以查询旗舰2023-08-14
- 芒果超媒:公司购买的理财产品均为保本产品2023-08-14
- 合力泰:部分银行账户被冻结 2023-08-14
- 快捷酒店价格,为何直追星级酒店?2023-08-14
- 合肥一烟酒店短时间两次违法 1瓶假酒罚款32023-08-14
- 十二星座中:谁是最受欢迎的星座?2023-08-14
- 港股一线丨港股疲弱,内房股汽车股集体走低2023-08-14
- 国家药监局推动适老化改革试点 保障用药安2023-08-14
- 冰原海雾中,他们闪耀着光——近距离感受中2023-08-14
- 石首“安薪”让农民工“安心” 半年追讨农2023-08-14
- 瑞信散户投资者计划对瑞银收购案提起诉讼2023-08-14
- 理论荐读|秦睿:“一切问题都要到现场去实2023-08-14
- 【中国经济新亮点①】重大项目建设有力有序2023-08-14
- 宝可梦游戏因定期发布策略面临质量问题挑战2023-08-14
- 恩施州已兑现6177万元“免申即享”补贴2023-08-14
- ox10042750(oxco150002)2023-08-14
- 武汉周边两日游适合去哪里(武汉周边两日游2023-08-14
- 蒋孔阳自选集:美的规律(关于蒋孔阳自选集2023-08-14
- 时事观察|“紧急状态”渐成厄瓜多尔“常态2023-08-14
- 日本芯片战略逐步落实,影响全球芯片格局2023-08-13
- 奥飞娱乐:公司正在推进相关合作事项2023-08-13
- 《博德之门3》解锁古代典籍的宝石获取方式2023-08-13
- 劝学韩愈拼音版(劝学韩愈)2023-08-13
- 可怕!加热3分钟释放几十亿塑料颗粒!千万2023-08-13
- 恭喜B罗夺冠!国米酝酿交易得到16球6助攻前2023-08-13
- 广州鼓励在城中村规模化建设保障性租赁住房2023-08-13