假设我有一个现有的项目,它是cmake配置的构建目录。如果我知道目标名称,我如何使用此构建检索某些目标的属性?
get_target_property(VAR target property)
字符串但是它失败了,
Command get_target_property() is not scriptable
型还有其他方法吗?
8tntrjer1#
显然,只有在使用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。否则您可能会错过一些内容,如下面的示例所示。
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中列出。
ANOTHER_DEF=0
app_compile_defs.txt
1条答案
按热度按时间8tntrjer1#
显然,只有在使用cmake配置构建目录时才能调用get_target_property()。我不知道在已经配置的构建目录上获取目标属性的任何方法。但是如果修改现有的CMakeFiles.txt是一个选项,那么有一个解决方案。
您可以尝试定位目标定义,获取目标的属性并将其转储到一个文本文件中。然后,此文件可以在构建目录配置完成后用于任何其他脚本调用。
此示例说明了此解决方法:
字符串
确保在CMakeFiles.txt中给定目标的每个属性更改完成后使用
get_target_property
。否则您可能会错过一些内容,如下面的示例所示。型
在上面的例子中,
ANOTHER_DEF=0
定义不会在app_compile_defs.txt
中列出。