我正在创建一个库,该库是使用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 }}。
答案 0 :(得分:1)
人们错误地认为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 packaging documentation中查看更多信息。
答案 1 :(得分:1)
为进一步说明,有一个模块可帮助您配置有效且可重定位的配置文件。
请参阅CMakePackageConfigHelpers模块提供的宏configure_package_config_file
。
如@Tsyvarev所述,XXXConfig.cmake
文件仍应手动编写,但应配置为configure_package_config_file
而不是configure_file
。