CMake的基本操作(以Windows平台为例)
一、What(CMake是什么)
CMake(Cross platform Make)是一个开源的跨平台的自动化构建(编译)工具,可以用简单的语句来描述所有平台的编译过程,并生成各个平台下对应的工程文件,它并不依赖于某特定的编译器
二、Why(为什么要使用CMake)
- 跨平台
- 命令使用简单
- 所有的配置一目了然,很直观
三、How(怎么使用CMake)
1、第一项肯定是下载CMake了,这里以Windows为例
2、CMake的所有操作都是在CMakeLists.txt里面完成的,所以主要就是完成CMakeLists.txt文件了
四、CMake的使用
1、一个最简单的cmake

在目录下面有一个main.cpp和一个CMakeLists.txt文件
main.cpp内容如下:
然后CMakeLists.txt内容如下:
打开cmd,输入命令如下
然后会生成一个sln文件,如下图所示
双击打开这个sln,然后将cmake_exec设置为默认启动项编译运行即可
2、设置vs默认启动项,加在add_executable后面
这个时候删除build目录,然后再重新来一次
3、执行cmake的时候执行编译器版本和输出路径
4、到此一个最简单的cmake程序就完了
五、CMake常用操作指令
1、设置CMake的版本
2、设置当前项目的名称
3、设置当前项目中使用C++的版本
4、设置要包含头文件的路劲
5、设置要链接库的路径
6、设置输出路径
7、搜集某个目录下面的源文件
8、生成静态库或动态库
9、生成可执行程序
10、设置要链接的库
11、设置链接时候的一些参数
12、添加子目录
如果不是子目录应该怎么办
13、划分目录结构
14、执行系统命令
15、字符串比较
16、输出调试打印信息,类似于printf
17、判断某个变量是否设置了
判断某个环境变量是否存在
设置环境变量
18、判断文件是否存在
19、判断CMake创建的逻辑目标是否存在
20、设置依赖
21、设置自定义命令,具体操作可查看文档
举个例子,比如我们有的时候想在编译之前、链接之前或者在所有项目生成之后执行某些命令,可以这么做
具体操作可参考:
22、设置fpic
23、创建函数
比如设置一个函数,按照目录对源文件进行分组
根据目录划分target
24、设置警告的等级
25、cmake判断平台
26、cmake设置编译为release
27、cmake 区别平台,目前 Windows,Linux,Android,Mac 平台都可以很好的区分,但是没有想到怎么区分 iOS
下面是一些在Windows上常用到的指令
27、设置unicode编码
28、release模式下生成pdb文件
29、设置多处理器编译
30、设置默认启动项
31、引入外部的工程
32、使用预编译头
33、当把警告视为错误的时候,屏蔽掉一些警告
34、强制指定Windows sdk的版本号,注意要写在project之前,在设置完cmake_minimum_required之后就需要指定,不然可能会不生效
四、CMake 中 macro、function
1、ARGC,ARGV,ARGN 的含义
测试代码1
输出结果1
可见,如果 function 后面不指定任何参数,那么 ARGV 和 ARGN 结果是一样的
测试代码2
输出结果2
在 function(file_source_group_2 hello) 函数里面多指定了一个参数,标识第一个传入的参数用 hello 捕获,这个时候 ARGV 还是所有的参数 list,但是 ARGN 是除了第一个参数的所有参数了
2、使用 function 自动生成 VS 的目录
四、CMake常见的宏
1、CMAKE_SOURCE_DIR :工程顶层目录所在的路径
2、CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt所在的路径,建议使用CURRENT_SOURCE,不建议使用SOURCE_DIR,因为如果主工程目录改变了,SOURCE_DIR也就会改变,很容易造成编译错误
3、CMAKE_BINARY_DIR:工程编译时的路径
4、PROJECT_NAME:工程名字
5、EXECUTABLE_OUTPUT_PATH:可执行文件的输出路径
6、LIBRARY_OUTPUT_PATH:库的输出路径
五、CMake和conan一起使用
cmake和conan搭配一起使用,具体代码如下
六、编译
Linux
Windows
Mac
七、写在最后
有错误欢迎指正,欢迎一起交流,谢谢!
