CMakePackageConfigHelpers 用cmake建立自己的package
CMakePackageConfigHelpers 用cmake建立自己的package
CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path> [PATH_VARS <var1> <var2> ... <varN>] [NO_SET_AND_CHECK_MACRO] [NO_CHECK_REQUIRED_COMPONENTS_MACRO])
示例代码
set(IVCOMMON_CMAKE_DIR share/ivcommon/cmake) include(CMakePackageConfigHelpers) configure_package_config_file( ivcommon-config.cmake.in ${PROJECT_BINARY_DIR}/cmake/ivcommon/ivcommon-config.cmake PATH_VARS IVCOMMON_CMAKE_DIR INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/ivcommon )
或
set(INCLUDE_INSTALL_DIR include/ ... CACHE ) set(LIB_INSTALL_DIR lib/ ... CACHE ) set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE ) ... include(CMakePackageConfigHelpers) configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR) write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake VERSION 1.2.3 COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
input 输入文件 后缀为-config.cmake.in 或 Config.cmake.in output 输出文件 -config.cmake 或 Config.cmake INSTALL_DESTINATION .cmake 文件的安装目录 PATH_VARS 后面接的每一个变量都有形参、实参两种意义: 形参是指在cmake.in 中可以用 @PACKAGE_IVCOMMON_CMAKE_DIR@ @PACKAGE_INCLUDE_INSTALL_DIR@ @PACKAGE_SYSCONFIG_INSTALL_DIR@来引用这些变量值 实参是指这些变量会将他们的值传递到函数内部,给形参。如果是相对路径也会自动转换为安装到的全局路径
文件内编写如下,两种方法生成 <package>_INCLUDE_DIRS 等变量 1、
@PACKAGE_INIT@ set_and_check(IVCOMMON_CMAKE_DIR "@PACKAGE_IVCOMMON_CMAKE_DIR@") include("${IVCOMMON_CMAKE_DIR}/IVCOMMONTargets.cmake") list(APPEND ivcommon_INCLUDE_DIRS ${PACKAGE_PREFIX_DIR}/include ${PACKAGE_PREFIX_DIR}/include/ivcommon ${PACKAGE_PREFIX_DIR}/include) list(APPEND ivcommon_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/libivcommon.so) list(APPEND ivcommon_PROTO_DIR ${PACKAGE_PREFIX_DIR}/include/) check_required_components(ivcommon)
2、
set(FOO_VERSION x.y.z) ... @PACKAGE_INIT@ ... set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@") check_required_components(Foo)