cmake - CMake:如何向已安装的配置添加功能?
问题描述
我正在创建一个使用 CMake 构建和安装的库。其中CMakeLists.txt
是install(TARGETS mylib ...)
安装库本身并install(EXPORT ...)
创建 CMake 配置。CMake 配置意味着find_package()
应用程序可以通过自己的CMakeLists.txt
. 到目前为止,没有什么令人惊讶的。
但除此之外,我还useful_fn.cmake
包含一个有用的 CMake 函数,我想将其提供给应用程序的CMakeLists.txt
. 我可以使用 install 手动安装它install(FILE useful_fn.cmake)
,但是应用程序如何知道在哪里可以找到它?它可以从配置中引用吗?
更好的是,CMake 配置可以直接包含已安装的版本吗?那么仅仅运行find_package(mylib)
就可以访问这个 CMake 函数吗?如果我手动编写整个 mylib-config.cmake,而不是像现在这样让 CMake 生成它,我可以这样做,但我真的不想这样做,只是为了添加一行 ( include(.../usefulfn.cmake)
)。
解决方案
CMake 应该生成XXXConfig.cmake
脚本是一种误解。相反,CMake 生成所有其他脚本的预期行为(名称可以是任何):
XXXConfigTargets.cmake
和install(EXPORT)
XXXConfigVersion.cmake
和write_basic_package_version_file()
这些脚本包含在手写XXXConfig.cmake
的脚本中,您可以在其中定义其他内容:
# File: XXXConfig.cmake
include(${CMAKE_CURRENT_LIST_DIR}/XXXConfigVersion.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/XXXConfigTargets.cmake)
# Here you may provide additional functions and other things.
function(my_func)
...
endfunction()
在CMake 打包文档中查看更多信息。
推荐阅读
- javascript - 使用 javascript 和 CSS 绘制曲线上的 sin 和 cos 动画
- typescript - 如何使用 cdk 获取帐户 ID
- omnet++ - 为什么 INET Aodv 路由在 OMNeT++ 中不起作用?
- sharepoint - 为什么我不能将 SharepointForm1 重命名为其他名称?
- keystore - 我应该为每个要加密的字符串创建一个新的 SecretKey 吗?
- python - 从 html 列表返回 json 字符串
- python - 类数,4,与 target_names 的大小,6 不匹配。尝试指定标签参数
- sql - 在 SQL Plus 中更新查询而不是提交并指导我在另一个会话中提交
- ios - 如何按字母顺序对 API 中的 JSON 数组进行排序?
- python - 我在 github 中复制了一个 tkinter 库代码,现在我遇到了缩进错误