我有一个项目,我需要一些特定的预处理器定义。没有别的了。我尝试了各种解决方案:
set(DEFINES MY_DEFINE)
target_compile_definitions(my_target PRIVATE ${DEFINES})
和
set(DEFINES -DMY_DEFINE)
add_definitions(${DEFINES})
甚至
set(DEFINES MY_DEFINE)
set_property(TARGET my_target PROPERTY CACHE COMPILE_DEFINITIONS ${DEFINES})
每次cmake仍然会注入其他一些定义:
WIN32
_WINDOWS
CMAKE_INTDIR="$(CONFIG)"
我的目标是静态库,项目生成器是Visual Studio 2015,如果它可能会影响任何东西。我怎样才能让cmake只设置我的定义?
答案 0 :(得分:3)
由于这些是CMake中特定于平台的定义,因此您只能将当前CMakeList.txt
范围内的“全局”删除(不适用于个别的taret),例如:
string(REGEX REPLACE "(-D|/D)[^ ]* " "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
<强>参考强>
答案 1 :(得分:0)
在CMake中,您可以使用remove_definitions来添加通过add_definitions添加的任何定义。我不确定这是否可行,因为cmake可能不会通过add_definitions添加它们。
您还可以在C ++文件的最顶层#undef定义这些定义。这有点脏,但可能有用。