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@来引用这些变量值
实参是指这些变量会将他们的值传递到函数内部,给形参。如果是相对路径也会自动转换为安装到的全局路径

cmake.in 文件内编写如下,两种方法生成 <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)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值