前言
最近准备从零创建一个工程库,于是就准备专门学习这一块的知识,最主要的就是编译系统搭建了。之前很少进行这方面的系统学习,都是基于已有的工程上面修改,一般就是加个文件或者选项,都是比较简单的,主要工作还是在代码逻辑的编写。鉴于是一个新的C语言的工程,那就选择cmake来作工程编译工具了。周末两天花了些时间,在掘金上面看了一个系列的博客,然后再对比的官网的使用文档学习一下cmake。
成功地跟着博客文章走了一轮下来,掌握了一些基本的使用,嗯,这就来稍微整理一下:
CMake的使用
setup
CMake最主要的就是CMakeLists.txt及相关的*.cmake的文件编写了。CMakeLists.txt是有层级的概念了, 可以通过include(dir)的方式把相关的CMakeLists.txt文件嵌套包含起来。这个方式跟shell脚本的引用类似。不过不同的CMakeLists.txt的工作目录在其所在的目录及build对应的目录下, 可以输出 CMAKE_CURRENT_SOURCE_DIR, CMAKE_CURRENT_BINARY_DIR变量查看。
第一步就是创建一个新目录,然后创建一个CMakeLists.txt文件。
根目录下的CMakeLists.txt必须填写工程名和cmake版本依赖, 还有可执行文件的创建:
1 |
|
构建程序
创建一个hello.c的文件,里面简单输出个hello world。然后就是构建一个程序了。 构建的时候cmake自动生成一些文件,一般创建一个build目录,然后再在build目录下构建。
1 | mkdir build |
安装程序
构建之后创建的文件都在build目录下了,我们想要把hello文件拷贝到系统bin目录下,便于终端直接执行,需要用到install命令。在CMakeLists.txt下添加以下内容:
1 |
|
特定函数检测
很多时候有些平台没有一些库,就不会提供部分函数功能。可以通过这个特性检测函数是否存在,设置到一个变量中,然后生成源程序文件中定义某个宏。我们在代码中根据这个宏来决定调用系统函数还是自定义函数。
1 |
|
文件生成
一种方式是使用configure_file命令, 根据input文件及当前的变量生成output文件
1 | CMakeLists.txt包含如下内容 |
另外一种方式就是使用add_custom_command来通过执行命令生成文件
1 | 创建自定义的版本信息, 可以使用shell脚本来达成目标 |
安装包生成
通过使用cpack生成安装包
在CMakeLists.txt里面添加下面内容:
1 |
|
执行过cmake后, 可以直接运行 make package / package_source命令 生成压缩包。还有一个sh脚本用于执行安装。
还学习了一些cmake的语法,创建库等操作。
更多
通过一溜子的操作,掌握了最基本的使用。后面在实际的应用中再找官方文档看看, 应该足够满足应用了。
又get了一个新技能!
示例代码: https://gitee.com/fishmwei/blog_code/tree/master/cmake_learn
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io/
掘金主页: https://juejin.cn/user/2084329776486919