1. 编译安装命令, 默认生成debug 版本的
cmake --build ./ --target=install
如果要生成Release 版本的,执行如下命令
cmake --build ./ --target=install --config Release
区分 开发版 与 发布版
上述的代码编译后都是不可调试的,并且没有做编译优化,我们希望能够编译成一个调试版本与一个发布版本。做法如下:
-
我们将build 目录作为开发版本编译目录,与之相对的新建一个release 目录作为发布版本 -
在build 目录下我们执行cmake -DMAKE_BUILD_TYPE=Debug .. ,编译命令会使用-g -
在release 目录下我们执行cmake -DMAKE_BUILD_TYPE=Release .. ,编译命令会使用-O3 -DNDEBUG
所以,在源代码中,我们可以使用NDEBUG 宏来控制,在开发版输出调试信息,而在发布版本去掉调试信息。
#ifndef NDEBUG
printf("author: %s, release_date: %s\n", AUTHOR, RELEASE_DATE ); # 只在开发版本编译
#endif
我自己在写代码的时候,习惯在开发版本打开所有的错误报告,而上述的开发版本只使用了-g ,这显然是不够的,需要通过在CMakeLists.txt 里重新设置下开发版本的编译参数:
cmake_minimum_required(VERSION 3.10)
PROJECT(PROJECT_ONE)
set(CMAKE_C_FLAGS_DEBUG "-g -Wall -pedantic -DDEBUG")
message(STATUS "debug flags: ${CMAKE_C_FLAGS_DEBUG}")
message(STATUS "release flags: ${CMAKE_C_FLAGS_RELEASE}")
...
通常我习惯使用脚本来完成重复的构建-编译-运行 这一过程,参考如下:
# ./make-debug.sh
#!/bin/bash
rm -rf build/* # 清理上一次的结果
cd build && cmake -DCMAKE_BUILD_TYPE=debug .. # 进入debug目录,执行构建
make && ./main # 编译,然后运行
./make-release.sh
#!/bin/bash
rm -rf release/* # 清理上一次的结果
cd release && cmake -DCMAKE_BUILD_TYPE=release .. # 进入release目录,执行构建
make && ./main # 编译,然后运行
几个参考文献:
cmake | CodeKissYoung
cmake应用:安装和打包 - 知乎为了方便使用项目编译的目标文件,快速部署到目标目录,可以使用CMake的安装功能;如果需要对外发布,提供头文件、库文件、或者demo的压缩包则可以使用CMake的打包功能。在本系列前序的文章中已经介绍了CMake很多…https://zhuanlan.zhihu.com/p/377131996
|