CMake:如何将功能添加到已安装的配置中?

时间:2018-07-11 17:08:17

标签: cmake

我正在创建一个库,该库是使用CMake构建和安装的。在oField中,CMakeLists.txt用于安装库本身,在install(TARGETS mylib ...)中用于创建CMake配置。 CMake配置意味着希望使用install(EXPORT ...)中的库的应用程序可以在find_package()中找到该库。到目前为止,不足为奇。

但是除此之外,我还拥有CMakeLists.txt,其中包含一个有用的CMake函数,我想将其提供给应用程序的useful_fn.cmake。我可以使用安装CMakeLists.txt手动安装它,但是应用程序如何知道在哪里找到它?可以从配置中引用它吗?

更好的是,CMake配置可以直接包含已安装的版本吗?因此,仅运行install(FILE useful_fn.cmake)就可以访问此CMake函数吗?如果我手动编写了整个mylib-config.cmake,而不是像现在那样让CMake生成它,我可以这样做,但我真的不愿意这样做,只是为了添加一行({{1 }}。

2 个答案:

答案 0 :(得分:1)

人们错误地认为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 packaging documentation中查看更多信息。

答案 1 :(得分:1)

为进一步说明,有一个模块可帮助您配置有效且可重定位的配置文件。

请参阅CMakePackageConfigHelpers模块提供的宏configure_package_config_file

如@Tsyvarev所述,XXXConfig.cmake文件仍应手动编写,但应配置为configure_package_config_file而不是configure_file