cmake 的特点主要有: 1,开放源代码,使⽤类BSD 许可发布。http://cmake.org/HTML/Copyright.html 2,跨平台,并可⽣成native 编译配置⽂件,在Linux/Unix 平台,⽣成 makefile,在苹果平台,可以⽣ 成xcode,在 Windows 平台,可以⽣成 MSVC 的⼯程⽂件。 3,能够管理⼤型项⽬,KDE4 就是最好的证明。 4,简化编译构建过程和编译过程。Cmake 的⼯具链⾮常简单:cmake+make。 5,⾼效虑,按照KDE 官⽅说法,CMake 构建KDE4 的 kdelibs 要⽐使⽤autotools 来构建 KDE3.5.6 的 kdelibs 快40%,主要是因为 Cmake 在⼯具链中没有libtool。 6,可扩展,可以为cmake 编写特定功能的模块,扩充cmake 功能。
1、安装
2、使用CMake生成makefile
2.1、项目结构介绍
当前环境
在这里插入图片描述
创建5个cpp文件分别是加减乘除函数,和main函数,最简单的方式是g++ *.cpp -o app 这种方式进行编译生成可执行程序,现在我们通过cmake来进这个项目进行编译在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2、编写CMakeLists.txt文件
在项目同级目录下创建CMakeLists.txt文件,通过下面三条命令就可以构建出我们的makefile文件了,为了让我们项目目录干净整洁,我们在当前目录下创建一个build目录,然后进入build目录下,执行cmake ..
执行cmake .. 之后在build目录下就生成了Makefile文件了,然后执行make就生成我们的可执行程序了
在这里插入图片描述
2.3、优化写法1
上面的写法要是源文件特别多的情况下就会不美观,诞生出通过set命令给变量SRC_LIST进行初始化,然后add_executable通过${}调用这个变量
这种写法还是不完善,源文件一旦多起来容易出错,并且也不人性化,通过搜索函数去目录下进行搜索,然后保存到变量中(两个函数都是用来去命令进行遍历)
2.4、给可执行程序设置路径
可以通过set对宏进行初始化,进行环境设置,表示设置编译器为c++11,下面是给生成的可执行程序指定目录
2.5、指定头文件目录
一般项目中.cpp目录一般存放在src,头文件一般存放在include目录下,下面创建include和src目录,将cpp文件和头文件放入到对应的目录下,并指定头文件目录在这里插入图片描述
2.6、制作库以及使用
将main.cpp拷贝出来,制作成动态库不需要测试程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
静态库和动态库调用
在这里插入图片描述
3、项目演练
3、字符串拼接
实际项目中,一般都是以模块化的形式出现的,现在我们进行模拟实际项目的情况,项目目录下有calc、include、sort、test1、test2文件夹和CMakeLists.txt文件,calc是计算相关的接口,sort是排序相关的接口,test1和test2分别是测试程序,include是项目的头文件
在这里插入图片描述
3.1、项目目录下的CMakeList.txt编写
主要做了两件事: 1、定义对应的变量提供给后面的子节点使用 2、将子目录添加到项目中来
3.2、calc目录下的CMakeLists.txt编写
搜索当前目录下的源文件,将其编译成库,库名是父节点中定义的,指定生成库的路径
3.3、sort目录下的CMakeLists.txt编写
搜索当前目录下的源文件,将其编译成库,库名是父节点中定义的,指定生成库的路径
3.4、test1目录下的CMakeLists.txt编写
搜索当前目录下的源文件,包含头文件路径,包含库文件路径,指定库文件,生成可执行程序路径和名字
3.5、test2目录下的CMakeLists.txt编写
搜索当前目录下的源文件,包含头文件路径,包含库文件路径,指定库文件,生成可执行程序路径和名字
执行完之后结果
在这里插入图片描述
3.6、在静态库中链接静态库
在以上项目中, sort中调用了calc中的函数,而calc将其编译成一个静态库了,所以在将sort编译成静态库之前需要先引入calc静态库,然后将其生成静态库
3.7、在静态库中链接动态库
将calc生成为动态库
在sort中链接calc生成的动态库
4、字符串拼接
4.1、自定义宏
在软件发布之前很多地方都使用了调试信息,但是为了提高效率,在软件发布的时候要去掉这些调试信息,可以通过自定义宏来解决
5、使用练习
CMakeLists.txt
使用cmake生成makefile