006 - CMake 安装动态库并生成 XxxConfig.cmake 文件

本文介绍了使用CMake安装动态库并生成XxxConfig.cmake文件的方法。CMake通过find_package找动态库,会调用相关Config文件。文中展示了CMakeLists.txt,还对其中的set_target_properties、target_include_directories等命令进行了简单解释,说明了各命令的作用和用法。

CMake 安装动态库并生成 XxxConfig.cmake 文件

引言

之前说了一下《使用 CMake 生成动态库/静态库》,既然写了动态库,那肯定是要提供给别人调用的,我们就来看看要怎么调用

写过 cmake 的都应该知道,cmake 通过 find_package 去找动态库,find_package 会去调用 XxxConfig.cmake 或 xxx-config.cmake 或 FindXxx.cmake 文件去找动态库,上述文件出现的顺序就是调用的优先级,前两个文件一般是库作者提供的,后一个主要用于库作者没提供前两个文件的时候我们自己编写一个给 find_package 调用。

展示

直接上 CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(FooLibrary VERSION 1.0.0)

set(CMAKE_CXX_STANDARD 11)

add_library(${PROJECT_NAME} SHARED library.cpp)

# 这个使用了生成器表达式,其他项目引入包的时候就可以同时引入头文件包含路径
target_include_directories(${PROJECT_NAME} INTERFACE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
        $<INSTALL_INTERFACE:include>)

set(CONFIG_FILE_PATH share/cmake/${PROJECT_NAME})

include(GNUInstallDirs)

include(CMakePackageConfigHelpers)

configure_package_config_file(FooLibraryConfig.cmake.in
        ${CMAKE_BINARY_DIR}/FooLibraryConfig.cmake
        INSTALL_DESTINATION ${CONFIG_FILE_PATH}
        PATH_VARS CMAKE_INSTALL_INCLUDEDIR)

write_basic_package_version_file(
        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
        VERSION ${CMAKE_PROJECT_VERSION}
        COMPATIBILITY SameMajorVersion)

install(TARGETS ${PROJECT_NAME}
        EXPORT ${PROJECT_NAME}Targets)

install(EXPORT ${PROJECT_NAME}Targets
        DESTINATION ${CONFIG_FILE_PATH})

install(FILES
        ${CMAKE_BINARY_DIR}/FooLibraryConfig.cmake
        ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
        DESTINATION ${CONFIG_FILE_PATH})

FooLibraryConfig.cmake.in

@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")

FooLibraryConfig.cmake.in

下面这几句主要是为了设置 <PackageName>_NCLUDE_DIR <PackageName>_NCLUDES <PackageName>_LIBRARY <PackageName>_LIBRARIES <PackageName>_LIBS 等变量,但是这些变量 CMake 没有要求且各个库提供的都不一样,所以也可以不设置。


                
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值