使用别名目标在CMake
Using alias targets in CMake
定义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 Error: set_target_properties不能用于ALIAS目标。我不明白为什么这不应该是可能的,因为我想定义我的lib的名称一次,并引用给定的别名每当我想调整目标的属性。任何提示如何使用别名目标"正确"?ALIAS目标除了不显示为Make目标之外还有什么用途?
ALIAS类似于"同义词"。ALIAS target只是original的另一个名称。所以要求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()
相关文章:
- 在 CMake 中为每个目标设置编译器/链接器标志
- 如何在 CMake 中对目标依赖项进行分组?
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- 在对象库中包含 CMake 目标的标头
- 导出(安装)的 cmake 目标是否可分发?
- CMAKE 目标链接打开 SSL 错误
- 在构建 Android 应用程序时禁用 CMake 目标
- 安装了要来源的特征cmake目标点包括但不安装
- 是否可以在编译后创建 CMake 目标和文件目录?
- 执行CMAKE目标的输出作为另一个目标的依赖
- 如何使用于 catch2 测试和项目运行的 cmake 目标更具可扩展性和合理性?
- 链接到CMake目标会产生什么影响
- 如何在 CMake 目标上请求 C++11 或更高版本
- 在特定的CMAKE目标之前运行NPM命令
- 如何以编程方式循环访问所有 CMake 目标
- CMAKE:目标依赖项存在问题(add_dependency不起作用?
- 如何为主机应用程序和任何使用过的库使用单独的CMake目标
- 如何在另一个CMake目标中加载主应用程序的接口类
- 根据cmake目标启用宏
- 在cmake目标的解决方案资源管理器中添加一些源文件的头依赖项