在CMake中使用别名目标

时间:2016-06-24 12:27:18

标签: c++ cmake

定义CMake目标时,可以创建别名目标,以便别名可用于引用后续命令中定义的目标。例如

add_library(foo_lib foo.cpp bar.cpp bat.cpp)
add_library(foo::lib ALIAS foo_lib)

据我了解,这样做的好处是名称foo_lib不会显示为制作目标。但是,给定这样的别名,我想为它们设置各种属性,例如:

set_target_properties(foo::lib PROPERTIES COMPILE_DEFINITIONS ...)
target_include_directories(foo::lib PUBLIC ... PRIVATE ...)

但遗憾的是,这是不可能的,因为 CMake错误:set_target_properties不能用于ALIAS目标。我不明白为什么这不应该是可能的,因为我想定义我的lib的名称一次,并在我想调整目标的属性时引用给定的别名。有关如何正确使用ALIAS目标的任何提示"?#34;? ALIAS目标的目的是什么,除了它们不会出现在Make目标之外?

1 个答案:

答案 0 :(得分:4)

ALIAS 类似于“同义词”。 ALIAS 目标只是原始目标的另一个名称。因此 ALIAS 目标要求不可修改 - 您无法调整其属性,安装它等等。

创建别名的可能方案之一 - 具有目标,概念上与原始目标不同,但实际上相同(例如,在给定配置中):

if(FOO_USE_SHIPPED)
    add_library(FOO ...) # Library FOO shipped with our project
endif()

...

# We need FOO_test for testing
if(FOO_USE_SHIPPED)
    add_library(FOO_test ALIAS FOO) # Use our library
else()
    add_library(FOO_test IMPORTED)
    set_target_property(FOO_test ...) # Use external library
endif()