首页 > 解决方案 > CMake:如何向已安装的配置添加功能?

问题描述

我正在创建一个使用 CMake 构建和安装的库。其中CMakeLists.txtinstall(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

解决方案


CMake 应该生成XXXConfig.cmake脚本是一种误解。相反,CMake 生成所有其他脚本的预期行为(名称可以是任何):

  • XXXConfigTargets.cmakeinstall(EXPORT)
  • XXXConfigVersion.cmakewrite_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 打包文档中查看更多信息。


推荐阅读