CMake入门实战 补充说明

来源:互联网 发布:两点最短路线 算法 编辑:程序博客网 时间:2024/06/09 15:24

“cmake入门实战”(http://www.hahack.com/codes/cmake/)是一个很不错的cmake入门教程,但还有一些不太完善的地方,现补充如下:


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),将 config.h 保存在 ${PROJECT_BINARY_DIR} ,但是 main.cc 中的包含语句为:

#include "config.h"

这意味着只能使用 cmake 的“内部构建”方式。如果使用“外部构建”方式,编译时将提示找不到 config.h 。

有两种解决办法:

1 修改 configure_file 指令,将 config.h 保存在 ${PROJECT_SOURCE_DIR} 。

2 将 ${PROJECT_BINARY_DIR} 加入项目的头文件搜索路径。代码如下:
     include_directories( ${PROJECT_BINARY_DIR} )

推荐方法2,因为方法1会“污染”源代码目录。


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),执行 ccmake 或 cmake -i 构建项目时表现正常,即:

    如果 USE_MYMATH=ON,则在 config.h 中定义宏 USE_MYMATH,并生成库文件 libMathFunctions.a。

    如果 USE_MYMATH=OFF,config.h 中不定义宏 USE_MYMATH,也不生成库文件。

但是执行 cmake 构建项目时,结果却是:

    config.h 没有定义宏 USE_MYMATH,但是生成了库文件 libMathFunctions.a。

原因在于 configure_file 指令位于 option 指令之前,也就是说生成 config.h 时,选项 USE_MYMATH 还未定义,因此 config.h 没有定义宏 USE_MYMATH。之后 option 指令定义选项 USE_MYMATH ,并设置初始值为 ON ,因此会编译生成库文件。

解决办法:将 option 指令放在 configure_file 指令的前面。


-----------------------------------------------------------------------
“自定义编译选项”一节中(对应例程为Demo4),已经将 ${PROJECT_SOURCE_DIR}/math 加入项目的头文件搜索路径,因此 main.cc 包含 MathFunctions.h 时,没有必要指定 math 子目录。

原创粉丝点击