我有一些目标 - 假设它是一个库 - 在我正在处理的存储库的 CMakeLists.txt
文件中。我想将以下三个分开:
- 我在
CMakeLists.txt
中使用的目标名称;说它需要是foo
。 - 导出的目标名称,其他人将在导入我安装的存储库后使用:前缀是
mypackage
,我希望目标名称是bar
,所以它将一起被进口商用作mypackage::bar
。 - 库文件基名;我希望它是
libbaz
,而不是libfoo
或libbar
。
我怎样才能做到这一点?
我可能能够使用 add_library()
命令的 ALIAS
修饰符实现这三个中的两个,但我想要所有三个.
最佳答案
有一些目标属性可以控制它:OUTPUT_NAME
和 EXPORT_NAME
。以下是我将如何实现您的方案:
cmake_minimum_required(VERSION 3.22)
project(mypackage)
add_library(foo ...)
add_library(mypackage::bar ALIAS foo)
set_target_properties(
foo
PROPERTIES
OUTPUT_NAME "baz"
EXPORT_NAME "bar"
)
include(GNUInstallDirs)
set(mypackage_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/cmake/mypackage"
CACHE STRING "Installation destination for CMake files")
install(TARGETS foo EXPORT mypackage-targets)
install(
EXPORT mypackage-targets
DESTINATION "${mypackage_INSTALL_CMAKEDIR}"
NAMESPACE mypackage::
)
# not shown: other install rules, components (incl. above), etc.
查看文档:
关于cmake - 如何为目标、文件名和导出名称分别命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71343475/