Gcc 如何在cmake中仅为调试版本设置GLIBCXX\u FORCE\u NEW=1?

Gcc 如何在cmake中仅为调试版本设置GLIBCXX\u FORCE\u NEW=1?,gcc,cmake,Gcc,Cmake,我需要将环境变量GLIBCXX\u FORCE\u NEW=1设置为仅用于调试构建,在cmake中 在cmake文档中,我只能找到: CMAKE_CXX_编译器 CMAKE_CXX_标志 CMAKE\U CXX\U标志\U调试 CMAKE\U CXX\U标志\U发布 CMAKE_CXX_FLAGS_RELWITHDEBINFO 您需要CMAKE\u BUILD\u TYPE 您可以使用if(CMAKE\u build\u type STREQUAL“Debug”)检查生成类型 另外,请注意ST

我需要将环境变量GLIBCXX\u FORCE\u NEW=1设置为仅用于调试构建,在cmake中

在cmake文档中,我只能找到:

  • CMAKE_CXX_编译器

  • CMAKE_CXX_标志

  • CMAKE\U CXX\U标志\U调试

  • CMAKE\U CXX\U标志\U发布

  • CMAKE_CXX_FLAGS_RELWITHDEBINFO


您需要
CMAKE\u BUILD\u TYPE

您可以使用
if(CMAKE\u build\u type STREQUAL“Debug”)
检查生成类型

另外,请注意STREQUAL是区分大小写的,因此在检查之前,您可能希望
字符串(大写…
您的变量。

为什么您需要一个“环境变量”用于构建?如果您只想为调试版本设置编译器或预处理器标志,请使用CMAKE\u CXX\u FLAGS\u debug,例如

SET(CMAKE_CXX_FLAGS_DEBUG“${CMAKE_CXX_FLAGS_DEBUG}-DGLIBCXX_FORCE_NEW=1”)


不要测试
如果(CMAKE_BUILD_TYPE STREQUAL“Debug”)
,它将不会在所有非Makefile CMAKE生成器(OSX带Xcode,Windows带Visual Studio)上工作环境变量
GLIBCXX_FORCE_NEW
只会在运行时影响编译程序的行为(请参阅)。将其添加为程序编译时定义的预处理器(例如,通过设置CMAKE_CXX_标志)不会产生效果

使用CMake,您可以设置一个环境变量,该环境变量只影响构建目标的运行时。以下命令添加对调试生成有效的测试,该测试将使用
GLIBCXX\u FORCE\u NEW
变量集运行可执行文件:

add_test(NAME MyTest CONFIGURATIONS Debug COMMAND MyExecutable)
set_tests_properties(MyTest PROPERTIES ENVIRONMENT "GLIBCXX_FORCE_NEW=1")

因为这正是gcc想要的(我需要设置它以便valgrind满意):
要全局禁用默认分配器库中的内存缓存,只需在运行程序之前在系统环境中设置GLIBCXX_FORCE_NEW(具有任何值)。如果您的程序在环境中因GLIBCXX\u FORCE\u NEW而崩溃,则可能意味着您链接了针对旧库构建的对象(可能仍在使用缓存分配的对象…。
这是关于运行时的,而不是编译。因此,sakra的答案是正确的。对于一般的预处理器指令,在
-D
之后需要一个空格,即:
设置(CMAKE\u CXX\u FLAGS\u DEBUG“${CMAKE\u CXX\u FLAGS\u DEBUG}-D GLIBCXX\u FORCE\u NEW=1”)