在CMake中使用别名目标

New*_*gie 7 c++ cmake

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

add_library(foo_lib foo.cpp bar.cpp bat.cpp)
add_library(foo::lib ALIAS foo_lib)
Run Code Online (Sandbox Code Playgroud)

据我所知,这样做的好处是名称foo_lib不会作为制作目标出现.但是,给定这样一个别名,我想为它们设置各种属性,例如:

set_target_properties(foo::lib PROPERTIES COMPILE_DEFINITIONS ...)
target_include_directories(foo::lib PUBLIC ... PRIVATE ...)
Run Code Online (Sandbox Code Playgroud)

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

Tsy*_*rev 6

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()
Run Code Online (Sandbox Code Playgroud)