gpt4 book ai didi

c++ - 在 CMake 中使用别名目标

转载 作者:可可西里 更新时间:2023-11-01 18:36:43 25 4
gpt4 key购买 nike

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

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

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

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

但不幸的是,这是不可能的,因为 CMake 错误:set_target_properties 不能用于 ALIAS 目标。我不明白为什么这不可能,因为我想定义一次我的库的名称,并在我想调整目标的属性时引用给定的别名。关于如何“正确”使用 ALIAS 目标的任何提示?除了不显示为 Make 目标之外,ALIAS 目标的目的是什么?

最佳答案

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()

关于c++ - 在 CMake 中使用别名目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38013451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com