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 没有要求且各个库提供的都不一样,所以也可以不设置。

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





