[TOC]

文章参考:https://zhuanlan.zhihu.com/p/102955723

文章参考:https://blog.csdn.net/rangfei/article/details/109304175

概述

如何将项目生成的库文件、头文件、可执行文件或相关文件等安装到指定位置(系统目录,或发行包目录)。在cmake中,这主要是通过install方法在CMakeLists.txt中配置,make install命令安装相关文件来实现的。

接下来我们为生成的target配置安装目录。install方法的基础用法如下

1
2
3
4
5
6
7
install(TARGETS MyLib
EXPORT MyLibTargets
LIBRARY DESTINATION lib # 动态库安装路径
ARCHIVE DESTINATION lib # 静态库安装路径
RUNTIME DESTINATION bin # 可执行文件安装路径
PUBLIC_HEADER DESTINATION include # 头文件安装路径
)

LIBRARY, ARCHIVE, RUNTIME, PUBLIC_HEADER是可选的,可以根据需要进行选择。

DESTINATION后面的路径可以自行制定,根目录默认为CMAKE_INSTALL_PREFIX,可以试用set方法进行指定,如果使用默认值的话,Unix系统的默认值为 /usr/local, Windows的默认值为 c:/Program Files/${PROJECT_NAME}。比如字linux系统下若LIBRARY的安装路径指定为lib,即为/usr/local/lib

他人如果使用我们编写的函数库,安装完成后,希望可以通过find_package方法进行引用,这时我们需要怎么做呢。

首先我们需要生成一个MyMathConfigVersion.cmake的文件来声明版本信息

1
2
3
4
5
6
7
# 写入库的版本信息
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
MyMathConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion # 表示该函数库向下兼容
)

其中PACKAGE_VERSION便是我们在CMakeLists.txt开头project(Installation VERSION 1.0)中声明的版本号。

第二步我们将前面EXPORT MyMathTargets的信息写入到MyLibTargets.cmake文件中, 该文件存放目录为${CMAKE_INSTALL_PREFIX}/lib/cmake/MyMath

1
2
3
4
5
6
install(EXPORT MyMathTargets
FILE MyLibTargets.cmake
NAMESPACE MyMath::
DESTINATION lib/cmake/MyLib
)

最后我们在源代码目录新建一个MyMathConfig.cmake.in文件,用于获取配置过程中的变量,并寻找项目依赖包。如果不一来外部项目的话,可以直接include MyMathTargets.cmake文件