【发布时间】:2015-01-07 04:58:42
【问题描述】:
在编译 CMake 创建的 Makefile 时,我无法获取使用 -D 或 add_definitions() 传递给 CMake 的任何内容。
(用一个简单的例子总结)。
在顶层,我有一个 build.sh 脚本,它以:
cmake \
-G "Unix Makefiles" \
-DPIZZA=1 \
-DCMAKE_VERBOSE_MAKEFILE=1 \
$TOPPINGS \
../../src
$TOPPINGS 之前被声明为 -DTOPPINGS=ALL。我已经验证它正确地传递到上面。基于 TOPINGS 的值,我的 CmakeLists.txt 使用 add_definitions() 添加了更多预处理器定义。为了便于讨论,我们会说它确实:
add_definitions( -DCHEESE=Mozz )
add_definitions( -DMEAT=Meat )
这生成没有问题。它们出现在 CMakeCache.txt 中:
//No help, variable specified on the command line.
CHEESE:UNINITIALIZED=Mozz
我已经使用 CMakeLists.txt 中的 message() 验证了我的逻辑。
但是当我们使用生成的 Makefile 构建时,这些并没有定义。既不是在调用 Cmake 时指定的,也不是通过 add_definitions 添加的。
在查看 add_definitions 的文档时,我看到:
将定义添加到编译器命令行中的源代码 当前目录及以下目录。
这是我问题的根源吗?即:仅为我从中运行 CMake 的目录添加定义,还是为 ../../src (及以下)中的所有内容添加定义,而问题出在其他地方?如果是这种情况,有没有办法手动指定这些定义应该适用于 ../../src 及以下?
【问题讨论】:
标签: c++ makefile cmake c-preprocessor