build - 使用 CMake,如何将别名“安装”到库?
问题描述
我正在将 CMake 用于库,目标名为foo
. 但是 - 我也希望图书馆的用户能够将其称为foo_altname
. 我试过这样做:
add_library(foo_alt ALIAS foo)
install(
TARGETS foo foo_altname
EXPORT strf)
# etc. etc.
...但这会触发错误!:
CMake Error at CMakeLists.txt:78 (install):
install TARGETS given target "foo_altname" which is an alias.
我应该怎么做呢?
解决方案
您可以在正在安装的主配置文件中创建一个别名,而不是“安装”一个别名以导出给用户。
请记住:是您(作为项目的开发人员)编写主配置文件,安装后将由find_package
. 使用EXPORT
不同命令的选项,您只需要求 CMake 生成其他文件,这些文件将包含在主文件中。
fooConfig.cmake:
# Include the file generated by CMake. This would define IMPORTED target 'foo'.
include("${CMAKE_CURRENT_LIST_DIR}/fooTargets.cmake")
# Additional declarations for a user
# E.g. create an alias
add_library(foo_altname ALIAS foo)
CMakeLists.txt:
# ...
install(
TARGETS foo
EXPORT fooTargets)
# Assume all configuration files to be installed into lib/cmake/
install(
EXPORT fooTargets
DESTINATION "lib/cmake"
# Install a hand-written configuration file
install(
FILES fooConfig.cmake
DESTINATION "lib/cmake"
请注意,如果别名只是一个前缀目标的名称,那么您可以使用 NAMESPACE 选项install(EXPORT)
命令:
install(
EXPORT fooTargets
DESTINATION "lib/cmake"
NAMESPACE alt::
这将提供 IMPORTED targetall::foo
而不是 plain foo
。
有关创建配置文件的更多详细信息,请参阅文档。
推荐阅读
- python - 为什么 Tensorflow/Keras 说我的标签和形状必须具有相同的尺寸?
- php - PHP过滤同位素
- flutter - 如何检查文档是否存在于 Firestore 集合中?
- django - 为什么 pytest 在测试模型创建时会抛出“AttributeError:'NoneType'对象没有属性'_meta'”错误?
- fortran - 不同类型及其基类的重载
- networking - 编写健壮的应用层消息解析器
- python - 如何估计迭代时间并用 for 循环的 tqdm 显示?
- css - 如何删除 ComboBox 和 DatePicker JavaFX 上方的微弱灰线
- python - 如何删除熊猫中的UTC偏移量?
- java - 网络服务 java