CMake - 与脚本一起安装用于依赖的查找脚本
CMake - Install Find script for depencency together with script
我正在围绕一些可安装的 SDK 创建一个 CMake 库。所以依赖树看起来像:
Application --> MyLibrary --> OfficialSDK
此 SDK 由某些 setup.exe
安装,没有 CMake 模块。
因此,我在 MyLibrary: MyLibrary/cmake/FindOfficialSDK.cmake
中包含了一个自定义查找脚本。然后在 MyLibrary 的 CMakeLists.txt
里面我可以使用 find_package(OfficialSDK)
.
这适用于 MyLibrary。我可以构建并安装它,连同 CMake 导出。那么 Application 可以 运行 find_package(MyLibrary)
开箱即用,因为 MyLibrary 是使用 CMake 正确安装的。
但是,在配置 Application 时出现错误:
Target "Application" links to target "OfficialSDK" but the target was not found.
好的,所以 MyLibrary 记得它需要 OfficialSDK,但是在这个 CMake 项目中找不到它。
我可以通过在 Application 中包含 cmake/FindOfficialSDK.cmake
来解决这个问题,但我不想让我的用户复制查找脚本,以防我将来需要更新它。
有什么方法可以包含导入的目标 OfficialSDK 并将其与 MyLibrary 一起安装,所以 Application不需要搜索吗?
我找到了一个解决方案,主要基于 https://discourse.cmake.org/t/install-findpackage-script/5307。
我在 Pagmo2 中找到的另一个示例,用于自定义 FindBoost
脚本:https://github.com/esa/pagmo2/blob/master/pagmo-config.cmake.in#L10
简而言之,我添加了以下内容:
- 为我的自定义查找脚本添加了安装:
install(FILE ${CMAKE_CURRENT_DIR}/cmake/FindOfficialSDK ...)
- 添加了将要安装的自定义
*-config.cmake.in
脚本,除了更自动的 *-targets.cmake
导出
- 在此配置脚本中添加了显式
find_dependency(OfficialSDK)
(不是 find_package
),但在将 MyLibrary cmake 安装目录添加到 CMake 的子句中模块路径,因此使用自定义查找脚本。
可以在这个 PR 中看到一个完整的例子:https://github.com/ET-BE/AdsClient/pull/1/files(以及其他一些东西)。 OfficialSDK 是 TwinCAT 的 ADS 库。
我正在围绕一些可安装的 SDK 创建一个 CMake 库。所以依赖树看起来像:
Application --> MyLibrary --> OfficialSDK
此 SDK 由某些 setup.exe
安装,没有 CMake 模块。
因此,我在 MyLibrary: MyLibrary/cmake/FindOfficialSDK.cmake
中包含了一个自定义查找脚本。然后在 MyLibrary 的 CMakeLists.txt
里面我可以使用 find_package(OfficialSDK)
.
这适用于 MyLibrary。我可以构建并安装它,连同 CMake 导出。那么 Application 可以 运行 find_package(MyLibrary)
开箱即用,因为 MyLibrary 是使用 CMake 正确安装的。
但是,在配置 Application 时出现错误:
Target "Application" links to target "OfficialSDK" but the target was not found.
好的,所以 MyLibrary 记得它需要 OfficialSDK,但是在这个 CMake 项目中找不到它。
我可以通过在 Application 中包含 cmake/FindOfficialSDK.cmake
来解决这个问题,但我不想让我的用户复制查找脚本,以防我将来需要更新它。
有什么方法可以包含导入的目标 OfficialSDK 并将其与 MyLibrary 一起安装,所以 Application不需要搜索吗?
我找到了一个解决方案,主要基于 https://discourse.cmake.org/t/install-findpackage-script/5307。
我在 Pagmo2 中找到的另一个示例,用于自定义 FindBoost
脚本:https://github.com/esa/pagmo2/blob/master/pagmo-config.cmake.in#L10
简而言之,我添加了以下内容:
- 为我的自定义查找脚本添加了安装:
install(FILE ${CMAKE_CURRENT_DIR}/cmake/FindOfficialSDK ...)
- 添加了将要安装的自定义
*-config.cmake.in
脚本,除了更自动的*-targets.cmake
导出 - 在此配置脚本中添加了显式
find_dependency(OfficialSDK)
(不是find_package
),但在将 MyLibrary cmake 安装目录添加到 CMake 的子句中模块路径,因此使用自定义查找脚本。
可以在这个 PR 中看到一个完整的例子:https://github.com/ET-BE/AdsClient/pull/1/files(以及其他一些东西)。 OfficialSDK 是 TwinCAT 的 ADS 库。