如何清除cmake的所有定义?

时间:2017-11-30 14:16:47

标签: c++ cmake

我有一个项目,我需要一些特定的预处理器定义。没有别的了。我尝试了各种解决方案:

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只设置我的定义?

2 个答案:

答案 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定义这些定义。这有点脏,但可能有用。