cmake add_definitions和COMPILE_DEFINITIONS,如何看待它们

edA*_*a-y 17 cmake

我想看看我的CMake文件中当前的编译器定义集是什么.Ones自动指定,我添加的将是伟大的.该COMPILE_DEFINITIONS宏似乎不包含 - 尽管文档说的是什么.

例如,在下面的设置中,消息从不包含 GUI_BUILD

add_definitions( -DGUI_BUILD )
message( "COMPILE_DEFINITIONS = ${COMPILE_DEFINITIONS}" )
Run Code Online (Sandbox Code Playgroud)

我不需要在最终形式中看到它们,我只想快速输出以帮助验证所有内容都已正确配置.

And*_*dré 23

您想从目录中提取COMPILE_DEFINITIONS属性.例如,使用以下内容:

add_definitions( -DDebug )
get_directory_property( DirDefs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地迭代它们,例如:

foreach( d ${DirDefs} )
    message( STATUS "Found Define: " ${d} )
endforeach()
message( STATUS "DirDefs: " ${DirDefs} )
Run Code Online (Sandbox Code Playgroud)

请注意,定义也可能与目标源文件而不是目录相关联.请注意,它们可能因配置而异.根据您的要求,您可能需要检查大量不同的属性.

  • 谢谢.简单地做`get_directory_property(DirDefs COMPILE_DEFINITIONS)`和`message("COMPILE_DEFINITIONS = $ {DirDefs}")`得到我想要的东西. (5认同)