跳到主要内容

kmpkg_cmake_config_fixup

合并并修正 Release 和 Debug 版本的 CMake 目标及配置文件,以支持多配置生成器。

用法

kmpkg_cmake_config_fixup(
[PACKAGE_NAME <name>]
[CONFIG_PATH <config-directory>]
[TOOLS_PATH <tools/${PORT}>]
[DO_NOT_DELETE_PARENT_CONFIG_PATH]
[NO_PREFIX_CORRECTION]
)

要使用此函数,你必须依赖辅助端口 kmpkg-cmake-config

"dependencies": [
{
"name": "kmpkg-cmake-config",
"host": true
}
]

此外,该函数还会修正目标文件的常见问题,例如绝对路径问题和二进制文件放置错误的问题。

对于许多端口而言,单独调用 kmpkg_cmake_config_fixup() 即可生效——因为 PACKAGE_NAME 默认为 ${PORT}CONFIG_PATH 默认为 share/${PACKAGE_NAME}。 若某个端口传递给 find_package 的包名与端口名不同,则应将 PACKAGE_NAME 修改为该包名。 若某个端口无法设置 *config.cmake 文件的存放目录,则可通过 CONFIG_PATH 指定这些文件的来源目录。

默认情况下,若 CONFIG_PATH 的父目录名为 "cmake",该父目录会被删除。 传入 DO_NOT_DELETE_PARENT_CONFIG_PATH 选项可禁用此行为,这对于安装多个 CMake 包配置文件的端口而言十分便捷。

NO_PREFIX_CORRECTION 选项会禁用 kmpkg 因移动配置文件而对 _IMPORT_PREFIX 执行的修正操作。 目前该修正操作未考虑配置文件的移动方式,仅采用一种简单的修正逻辑,在某些情况下可能导致错误结果。

工作原理

  1. /debug/<CONFIG_PATH>/*targets-debug.cmake 移动至 /share/${PACKAGE_NAME} 目录。
  2. 在 Windows 系统上,将所有匹配 /bin/*.exe 的引用转换为 /${TOOLS_PATH}/*.exe
  3. 在其他平台上,将所有匹配 /bin/* 的引用转换为 /${TOOLS_PATH}/*
  4. 修正自动生成目标文件中的 ${_IMPORT_PREFIX} 路径。
  5. 将配置文件中的 ${CURRENT_INSTALLED_DIR} 替换为 ${_IMPORT_PREFIX}
  6. 合并 Release 和 Debug 配置的 INTERFACE_LINK_LIBRARIES(接口链接库)。
  7. 将目标文件中的 ${CURRENT_INSTALLED_DIR} 替换为 ${KMPKG_IMPORT_PREFIX}
  8. 删除 /debug/<CONFIG_PATH>/*config.cmake 文件。

示例

源码

ports/kmpkg-cmake-config/kmpkg_cmake_config_fixup.cmake