CMake入门实战 补充说明

“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 子目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值