如何清除所有定义CMAKE

How to clear all defines from cmake?

本文关键字:定义 CMAKE 清除 何清除      更新时间:2023-10-16

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

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

,由于这些是平台在cmake中的特定定义,因此您只能为当前的CMakeList.txt范围"全球"删除它们,而不是以下内容:

string(REGEX REPLACE "(-D|/D)[^ ]* " "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

参考

  • CMAKE设置变量递归?

在cmake中,您可以对通过add_definitions添加的任何定义使用remove_definitions。不过,我不确定这是否会在这里工作,因为CMake可能不会通过add_definitions添加它们。

您还可以在C 文件的顶部#UNDEF #UNDEF。这有点脏,但可能起作用。