我尝试在CMake的命令行中设置预处理器宏.我试过了:
set generator="Visual Studio 8 2005"
set params=-D MY_MACRO=1
cmake.exe -G %generator% %params% ..\some_project
Run Code Online (Sandbox Code Playgroud)
但是我在编译时既没有定义,也没有MY_MACRO
在CMake生成的文件中找到该名称,除了CMakeCache.txt
它在表单中的位置:
MY_MACRO:UNINITIALIZED=1
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
fre*_*ass 25
一个很好的选择是定义一个cmake选项:
OPTION(DEFINE_MACRO "Option description" ON) # Enabled by default
Run Code Online (Sandbox Code Playgroud)
其次是条件:
IF(DEFINE_MACRO)
ADD_DEFINITIONS(-DMACRO)
ENDIF(DEFINE_MACRO)
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用-D
标志通过命令行使用cmake打开/关闭该选项.例:
cmake -DDEFINE_MACRO=OFF ..
Run Code Online (Sandbox Code Playgroud)
要确保编译器正在接收定义,可以在详细模式下调用make并检查是否定义了宏:
make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)
这也是一个很好的解决方案,因为make
在任何cmake选项更改时都会重新编译代码.
ybu*_*ill 11
问题背后的动机是批量构建 3rd 方库,这就是为什么我想避免修改 CMakeLists.txt 的原因。多年后,即使我不再需要它,我发现它很容易通过CMake 外部的方式实现:
像往常一样调用 CMake,没有特殊标志。
然后:
使用 MSVC:编译器读取CL
环境变量以获取额外的命令行参数。所以
set CL=/DMY_MACRO=1 %CL%
Run Code Online (Sandbox Code Playgroud)
然后调用 MSBuild 来完成它的工作。
使用 Makefile:生成的 makefile 使用CFLAGS
和CXX_FLAGS
变量作为 makefile 的预期用途。所以构建可以通过
make CXX_FLAGS=-DMY_MACRO=1
Run Code Online (Sandbox Code Playgroud)
或者通过设置相应的环境变量。
Sla*_*Nov 10
试试这个: -D CMAKE_CXX_FLAGS=/DMY_MACRO=1