cmake - 如何为目标、文件名和导出名称分别命名?

标签 cmake buildconfiguration

我有一些目标 - 假设它是一个库 - 在我正在处理的存储库的 CMakeLists.txt 文件中。我想将以下三个分开:

  1. 我在 CMakeLists.txt 中使用的目标名称;说它需要是 foo
  2. 导出的目标名称,其他人将在导入我安装的存储库后使用:前缀是 mypackage,我希望目标名称是 bar,所以它将一起被进口商用作 mypackage::bar
  3. 库文件基名;我希望它是 libbaz,而不是 libfoolibbar

我怎样才能做到这一点?

可能能够使用 add_library() 命令的 ALIAS 修饰符实现这三个中的两个,但我想要所有三个.

最佳答案

有一些目标属性可以控制它:OUTPUT_NAMEEXPORT_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/

相关文章:

git - 如何跨不同构建工具管理发布版本?

visual-studio - 根据新 ASP.NET 5 项目中的配置名称发布构建事件

java - 在 Eclipse 下实现 Java/Android 中的构建配置

c++ - 如何让 CMake 检查我的 header 是否自给自足?

CMake列表字符串: simple semicolon replacement

c++ - cygwin cmake 找不到 boost 库

c++ - 根据c++头文件和cmake命令分配输出名称

C++:__try...__except;在 Release模式下隐藏崩溃?

.net - 我可以从构建配置中排除命名空间(即 Name1.Name2)吗

windows - cmake add_custom_target 在完成命令之前不会在 Windows 上打印到标准输出