Gcc 添加定义和在CMake文件中设置有什么区别

Gcc 添加定义和在CMake文件中设置有什么区别,gcc,makefile,cmake,g++,gnu-make,Gcc,Makefile,Cmake,G++,Gnu Make,我不太会做东西。我被CMake文件中的add\u定义和set弄糊涂了 比如说,, add_定义(-D_GLIBCXX_USE_cx11_ABI=0)和set(D_GLIBCXX_USE_cx11_ABI,“0”),有什么区别吗?我看到了不同的结果,但我无法理解 第二个问题:D\u GLIBCXX\u使用了什么\u cx11\u ABI 感谢您的帮助 非常感谢 为项目中的每个编译器调用添加定义(-D\u GLIBCXX\u USE\u cx11\u ABI=0)附加-D\u GLIBCXX\u U

我不太会做东西。我被CMake文件中的
add\u定义
set
弄糊涂了

比如说,,
add_定义(-D_GLIBCXX_USE_cx11_ABI=0)
set(D_GLIBCXX_USE_cx11_ABI,“0”)
,有什么区别吗?我看到了不同的结果,但我无法理解

第二个问题:
D\u GLIBCXX\u使用了什么\u cx11\u ABI

感谢您的帮助

非常感谢

为项目中的每个编译器调用添加定义(-D\u GLIBCXX\u USE\u cx11\u ABI=0)
附加
-D\u GLIBCXX\u USE\u cx11\u ABI=0
标志

set(D\u GLIBCXX\u USE\u cx11\u ABI,“0”)
只需将名为
D\u GLIBCXX\u USE\u cx11\u ABI的CMake变量设置为
0
。您可能看不到任何区别,因为在代码下面的某个地方,它被用作
add\u definitions()
的值:


谢谢你的详细解释。我认为这是清楚的。关于第二部分,你知道D_GLIBCXX_USE_CXX11_ABI实际上改变了什么吗?我知道这个话题有点老了。但是,上面的标志指示编译器是否应该启用旧ABI。详情请参阅:
if(D_GLIBCXX_USE_CXX11_ABI)
  add_definitions(-D_GLIBCXX_USE_CXX11_ABI=${D_GLIBCXX_USE_CXX11_ABI})
endif()