cmake项目构建风格¶
CMakeLists.txt的编写风格¶
- 使用外部构建;
- 所有的指令名小写, 指令和圆括号之间没有空格, 圆括号和参数之间也没有空格;
- 变量名用大写;
- 适当的使用空行进行分隔;
- 虽然在cmake中字符串不需要使用双引号包围, 但是建议始终用双引号包围字符串, 取变量值的表达式也可以包围在双引号中;
- 对于较大的项目, 不要写一个很大的CMakeLists.txt文件, 建议进行适当的拆分, 在项目根目录下的CMakeLists.txt中包含子目录下的CMakeLists.txt文件或cmake脚本.
内部构建和外部构建¶
内部构建(in-source build)¶
构建生成的文件和临时文件, 和源文件在同一个目录下, 带来的结果是混乱.
外部构建(out-of-source build)¶
将构建生成的文件, 临时文件和源文件分开, 在一个单独的目录下构建; 使用外部构建, 构建过程不会影响源文件目录, 强烈建议使用外部构建;
项目结构设计¶
- 包含一个
src目录, 用来存放项目源文件; - 包含一个
doc目录, 用来存放用于生成项目文档的相关; - 包含一个
3rd_party目录, 用来存放项目中使用的第三方项目; - 包含一个
example目录, 用来存放示例代码; - 包含一个
test目录, 用来存放单元测试; - 包含一个
scripts目录, 用来存放脚本; - 包含一个
build目录, 作为构建目录; - 包含一个
pkg-config目录, 用来存放用于生成pkg config file的相关; - 包含一个
cmake-modules目录, 用来存放cmake脚本; - 项目目录下包含
readme,copyright文件.
构建目录build的结构的一些建议¶
- 包含一个
bin子目录, 用来存放构建生成的二进制可执行文件; - 包含一个
static子目录, 用来存放构建生成的静态库文件; - 包含一个
shared子目录, 用来存放构建生成的动态库文件; - 包含一个
doc子目录, 用来存放构建生成的文档; - 包含一个
example子目录, 用来存放构建后的示例程序; - 包含一个
scripts子目录, 用来存放脚本文件; - 包含一个
pkg-config子目录, 用来存放生成的pkg config file; - 包含一个
cmake-modules子目录, 用来存放项目的cmake脚本.