从cmake构建中检索目标属性

时间:2014-07-22 07:36:50

标签: cmake target

假设我有一个现有项目及其cmake配置的构建目录。如果我知道目标名称,我如何使用此构建来检索某些目标属性?我尝试创建一个像这样的单独脚本

get_target_property(VAR target property)

但失败并显示错误

Command get_target_property() is not scriptable

还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

显然只有在使用cmake配置构建目录时才能调用get_target_property()。我不知道在已配置的构建目录上获取目标属性的任何方法。但是,如果修改现有的CMakeFiles.txt是一个选项,则有一种解决方法。

您可以尝试查找目标定义,获取目标的属性并将其转储到文本文件中。然后,可以在构建目录配置完成后调用的任何其他脚本中使用此文件。

此示例说明了此解决方法:

add_executable(app ${app_sources}) 
set_target_properties(app PROPERTIES COMPILE_DEFINITIONS SOME_DEF=1)

get_target_property(compile_defs app COMPILE_DEFINITIONS)
file(WRITE app_compile_defs.txt ${compile_defs})

确保在CMakeFiles.txt中的给定目标的每个属性更改完成后使用get_target_property。否则你会错过一些东西,如下例所示。

add_executable(app ${app_sources}) 
set_target_properties(app PROPERTIES COMPILE_DEFINITIONS SOME_DEF=1)

get_target_property(compile_defs app COMPILE_DEFINITIONS)
file(WRITE app_compile_defs.txt ${compile_defs})

set_target_properties(app PROPERTIES COMPILE_DEFINITIONS ANOTHER_DEF=0)

在上面的示例中,ANOTHER_DEF=0定义不会列在app_compile_defs.txt中。