Cmake生成器表达式外部项目的目标属性

Cmake生成器表达式外部项目的目标属性,cmake,Cmake,我需要使用外部项目中的属性。到目前为止,我成功地做到了这一点: ExternalProject_Add( some_ep_name ... ) # Get source dir ExternalProject_Get_Property(some_ep_name SOURCE_DIR) # Set source dir value into less generically named variable set(SOME_EP_NAME_SOURCE_DIR "${SOURCE

我需要使用外部项目中的属性。到目前为止,我成功地做到了这一点:

ExternalProject_Add(
    some_ep_name
    ...
)

# Get source dir
ExternalProject_Get_Property(some_ep_name SOURCE_DIR)

# Set source dir value into less generically named variable
set(SOME_EP_NAME_SOURCE_DIR "${SOURCE_DIR}")
这是可行的,但它似乎不必要地冗长,这让我有点恼火。我希望我可以使用生成器表达式,如下所示:

"$<TARGET_PROPERTY:some_ep_name,SOURCE_DIR>"
“$”
但这似乎不起作用。在我放弃之前,我想检查我是否做错了什么,或者是否有人知道更好的方法。

ExternalProject的所有“属性”在配置时都是已知的。因此,它们不需要支持生成器表达式,其主要目的是用于在配置时未知的值(但在构建时已知)

如果您发现“不必要的冗长”有几行代码用于将外部项目的属性保存到变量中,您可以创建一个宏/函数来合并所有这些行。然后调用宏/函数将只使用一行代码:

function(ExternalProject_Property_to_Var VAR eproject prop)
    ExternalProject_Get_Property(${eproject} ${eprop})
    set(${VAR} ${${eprop}} PARENT_SCOPE)
endfunction()

...
ExternalProject_Property_to_Var(SOME_EP_NAME_SOURCE_DIR some_ep_name SOURCE_DIR)