外部项目的Cmake生成器表达式TARGET_PROPERTY

时间:2017-05-13 04:47:06

标签: 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_DIR}")

这样可行,但似乎不必要地冗长,而且让我有点恼火。我希望我可以使用生成器表达式,如下所示:

"$<TARGET_PROPERTY:some_ep_name,SOURCE_DIR>"

但似乎这不起作用。在我放弃之前,我想检查一下我做错了什么或者是否有人知道更好的方法。

1 个答案:

答案 0 :(得分:0)

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)