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脚本.