我遇到了一个问题,即在使用 -D 或 add_definitions() 传递任何内容给 CMake 时,CMake 创建的 Makefiles 编译时都没有显示出来。在顶层目录中,我有一个 build.sh 脚本,其开头为:
cmake \
-G "Unix Makefiles" \
-DPIZZA=1 \
-DCMAKE_VERBOSE_MAKEFILE=1 \
$TOPPINGS \
../../src
$TOPPINGS先前被声明为-DTOPPINGS = ALL。我已验证它正确地传递给了上述内容。根据TOPPINGS的值,我的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()验证了我的逻辑。
但是,当我们使用生成的Makefiles构建时,这些未被定义。无论是在调用Cmake时指定的还是通过add_definitions添加的都不行。
查看add_definitions的文档,我发现:
为当前目录及其子目录中的源文件添加编译器命令行定义。
这是我的问题所在吗?即:这些定义仅添加到我正在运行CMake的目录中,还是添加到../../src(及其以下)中的所有内容,问题出在其他地方?如果是这种情况,有没有一种方法手动指定这些定义应适用于../../src及其以下的目录?