Cmake 学习笔记1 cmake初探与参数传递
Cmake 学习笔记1 cmake初探与参数传递
最近需要在github上看一些项目,发现很多项目都是cmake编写的,看起来一头雾水,所以最近学习了下cmake相关的知识,在这个系列里记录下学习的痕迹。
最简单的cmake程序
首先cmake是一个自动化的构建,某种程度上可以理解为对makefile的一种封装,即可以通过更简便的方式来进行编译。
首先需要在文件夹下新建一个CMakeLists.txt,输入一下内容,这就是最简单的一个cmake文件
1 | #指定最低cmake版本 |
之后新建一个build文件夹,并在里面运行cmake指令如下,当然也可以直接cmake,只不过为了文件夹看起来简洁易懂所以新建一个build文件夹,我认为这是个好习惯。
1 | mkdir build |
运行完成之后便可以发现在文件夹下生成了一堆文件,其中包含一个makefile文件,之后便可以通过make或者cmake --build来进行编译
cmake --build的作用我认为是用作跨平台的方便使用,在unix下跟make没啥差别,具体可以参考这个博客 https://blog.csdn.net/itworld123/article/details/123862402
编译完成后即可运行程序。
传递参数
cmake也可以完成参数的传递,如我想定义一个版本号的参数 #define GYY_VERSION 1
,其实我可以直接写在头文件里,但是cmake也提供了另一种简便的方式。
首先新建文件gyypro.h.in,输入一行代码
1 |
在刚才的cmake文件最后添加如下三行
1 |
|
其中第一行定义了变量GYYPro_VERSION 的值为1.
第二行配置文件,configure_file(gyypro.h.in gyypro.h)的作用就是将gyypro.h.in文件复制到gyypro.h.in,并将里面的变量进行替换,在这里就是把@GYYPro_VERSION@替换为刚才定义的值1.configue_file的详解可以参考这个博客https://blog.csdn.net/heleneveryday/article/details/118696085
第三行的作用就是定义头文件的搜索路径,configure_file生成在当前目录下,也就是build下,所以需要把build目录加到include路径里,当然也可以给configure_file加路径,使得头文件声称在源代码路径里(但是这样会破坏原来的文件结构,给源项目增加文件,我觉得不可取).
target_include_directories有一个参数是PUBLIC,除了PUBLIC之外还有PRIVATE和INTERFACE,具体区别还比较复杂我觉得,可以参考以下博客https://zhuanlan.zhihu.com/p/82244559
通过以上三行,就可以完成参数的传递。