C++编译之(4)-进阶-cmake设置install及package配置
引言
上一节我们介绍到了如何使用cmake快速构建项目,实现c/c++的构建自动化;那么项目构建完成后往往需要安装
或者打包发布
这一节,我们将介绍,如何用cmake实现安装及打包
相关系列文章内容:
C++编译之(1)-g++单/多文件/库的编译及
C++编译之(2)-make及makefile编译过程
C++编译之(3)-camke/CMakeLists.txt的编译使用
一、cmake设置install安装参数
install的本质核心就是文件拷贝以,此外还有些需要添加或配置环境变量。而我们常用的源码编译后的安装命令是make install
,其实这个命令又回到了前两节课的Makefile
的制作上,make install
中的install
本质就是Makefile
定义的一个目标名称或者就是一个构建标签。这个install
标签下包含一系列的安装指令(其实主要就是文件拷贝shell
指令)
1、基本的安装配置命令
cmake设置install主要是在CMakeLists.txt配置install命令
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo)
install(DIRECTORY model DESTINATION ./)
首先安装最重要的就是安装路径的设置CMakeLists.txt通过设置CMAKE_INSTALL_PREFIX
定义统一的安装前缀;而具体安装的相对路径则是通过安装指令CMakeLists.txt中的安装指令install中的DESTINATION 关键字。如下所示
# 设置统一安装路径前缀
set(CMAKE_INSTALL_PREFIX /usr/local)
# 定义安装对象及安装路径
install(TARGETS mainPro DESTINATION testPro/bin)
上面的目标文件main
安装最终路径为${cmake_install_prefix}/<destination定义的路径>
即/usr/local/testPro/bin
目录下
通常我们会把可执行文件、静态库、动态库会分别放在不同的路径,如下:
文件类型 | 路径 | 备注 |
---|---|---|
可执行文件 | usr/bin 、usr/local/bin |
- |
静态库*.a | usr/lib 、usr/local/lib |
- |
动态库(*.so) | usr/lib 、usr/local/lib |
- |
头文件(*.h) | usr/include 、usr/local/include |
- |
install命令允许我们可以根据文件类型自动地分别指向不同的路径,通过给定RUNTIME
、LIBRARY
、ARCHIVE
,如下所示:
install(TARGETS exec_cmd static_lib shared_lib
RUNTIME DESTINATION bin # 可执行文件的目标路径
LIBRARY DESTINATION lib # 共享库的目标路径
ARCHIVE DESTINATION lib # 静态库的目标路径
)
而对于头文件,我们通常指定一个安装一整个目录到指定的路径中,如下所示:
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/"
DESTINATION ./include/testPro)
2、安装文件
有时,我们需要安装一些特定的非编译的文件(如:某些预定的数据文件),这时我们可以采用下面的命令
install(FILES my.sql DESTINATION ./testPro/db)
3、自定义安装脚本配置
当然,有时我们需要更加自定义的安装,这时,我们可以采用自定义安装脚本命令
install(SCRIPT ${PROJECT_SOURCE_DIR}/testProInstall.sh)
4、如何执行安装?
完成CMakeLists.txt的安装配置编写后,我们还是一样,首先执行cmake构建出Makefile,然后执行make构建项目,最后执行我们经常看到的安装指令make install
# 创建临时构建目录 build
mkdir build
cd build
# 构建Makefile
cmake ..
# 编译
make
# 安装
make install
当然,如果你需要的话,还可以在使用cmake
命令构建Makefile文件时,修改这个覆盖上面的安装路径,使新生成的Makefile设置的安装路径是你需要的安装路径
cmake -DCMAKE_INSTALL_PREFIX="../install" ..
当然,我们这里假设你不打算修改直接修改原始的
CMakeLists.txt
文件中的CMAKE_INSTALL_PREFIX
变量
或者你已经执行了cmake ..
,而且执行了make
构建命令,还有没办法修改安装路径呢(比较我们都是控制狂,总是想稍微多控制一点点)。我们可以在执行make install
时,增加参数,如下所示