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 执行的修正操作。
目前该修正操作未考虑配置文件的移动方式,仅采用一种简单的修正逻辑,在某些情况下可能导致错误结果。
工作原理
- 将
/debug/<CONFIG_PATH>/*targets-debug.cmake移动至/share/${PACKAGE_NAME}目录。 - 在 Windows 系统上,将所有匹配
/bin/*.exe的引用转换为/${TOOLS_PATH}/*.exe。 - 在其他平台上,将所有匹配
/bin/*的引用转换为/${TOOLS_PATH}/*。 - 修正自动生成目标文件中的
${_IMPORT_PREFIX}路径。 - 将配置文件中的
${CURRENT_INSTALLED_DIR}替换为${_IMPORT_PREFIX}。 - 合并 Release 和 Debug 配置的
INTERFACE_LINK_LIBRARIES(接口链接库)。 - 将目标文件中的
${CURRENT_INSTALLED_DIR}替换为${KMPKG_IMPORT_PREFIX}。 - 删除
/debug/<CONFIG_PATH>/*config.cmake文件。