CMake 安装与打包

书接上回,前面我们已经介绍了动态库、静态库的构建和使用,这里将介绍项目构建完成后的安装打包发布

上一节:

动态库、静态库的构建与使用_爱钓鱼的歪猴的博客-CSDN博客

目录

 一、安装

1、理解install命令

2、CMakeLists.txt

3、执行安装

 二、打包发布

CMakeLists.txt

打包发布

 三、个人总结


 一、安装

1、理解install命令

nstall 命令用于指定文件的输出路径,这个文件可以是二进制执行文件、动态库文件、静态库文件,甚至是目录。通俗的来讲,install 其实就是把生成的文件统一拷贝到某个目录下,方便打包或者转移

install 在不同场合,使用的格式也会有所不同,大体可分为安装目标文件、安装目录。需要注意的是,运行 make 命令时不会执行install命令,运行 make install  才会执行 install 命令
 

2、CMakeLists.txt

直接看最后三个命令即可

# 添加源文件目录
aux_source_directory(./ SOURCES)

# 生成可执行文件
add_executable(example ${SOURCES})


# 添加动态库 得到libhaha.so动态库文件
add_library(haha SHARED haha.cpp)
# 给动态库添加版本号 得到libhaha.so.1.2  同时有两个链接
set_target_properties(haha PROPERTIES VERSION 1.2 SOVERSION 1)

# 添加静态库  得到libhaha.a静态库文件
add_library(haha_static STATIC haha.cpp)
# 更改输出库的名字 libhah.a 修改为 libhello.a
set_target_properties(haha_static PROPERTIES OUTPUT_NAME "hello")

# 设置可执行文件的输出路径 这是是工程目录下的lib目录
SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")
# 设置库文件的输出路径 这是是工程目录下的lib目录
SET(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")


# 设置统一安装路径前缀 该路径必须存在
set(CMAKE_INSTALL_PREFIX /home/jason/work/my-deploy/example/my_install_test)



# 安装 目标文件(TARGETS)
install(TARGETS ${PROJECT_NAME} haha_static haha   #等待安装的目标文件 可执行文件 静态库 动态库
    RUNTIME  DESTINATION bin                       # 安装 可执行文件到指定目录下的bin目录
    LIBRARY DESTINATION lib                        # 安装 动态库文件到指定目录下的lib目录
    ARCHIVE DESTINATION static_lib)                # 安装静态库文件到指定目录下的static_lib目录

# 安装普通文件 (FILES)
install(FILES haha.h DESTINATION include)

3、执行安装

在项目所在目录打开终端,执行:

mkdir build && cd build
cmake ..
make 
make install

查看是否都安装都指定目录:

这些目录都是CMake install 自动生成的

 查看文件是否在目录下:

 二、打包发布

CMakeLists.txt

# 添加源文件目录
#aux_source_directory(./ SOURCES)
#file(GLOB SRC_LIST "*.cpp" "src/*.cpp" "src/modules/*.cpp")

# 生成可执行文件
add_executable(example main.cpp)

# 添加动态库 得到libhaha.so动态库文件
add_library(haha SHARED haha.cpp)
# 给动态库添加版本号 得到libhaha.so.1.2  同时有两个链接
set_target_properties(haha PROPERTIES VERSION 1.2 SOVERSION 1)


# 链接刚刚生成的动态链接库 到可执行文件
target_link_libraries(${PROJECT_NAME} haha)

############################## deb 打包配置 ################################


# 说明要生成的是deb包
SET(CPACK_GENERATOR "DEB")

# 设置版本
set(CPACK_PACKAGE_VERSION "1.0.0")
# 还可通过设置每个版本字段号设置版本
#设置版本信息如下
#SET(CPACK_PACKAGE_VERSION_MAJOR "1")
#SET(CPACK_PACKAGE_VERSION_MINOR "0")
#SET(CPACK_PACKAGE_VERSION_PATCH "0")

# 设置安装包的包名,打包好的包将会是<packagename>-<version>-<sys>.deb,如果不设置,默认就是工程名
set(CPACK_PACKAGE_NAME "haha")

# 设置程序名,就是程序安装之后的名字
set(CPACK_DEBIAN_PACKAGE_NAME "haha" )

# 设置架构
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") # amd64 与 x86_64 同意

# 设置依赖
#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6)") # libc6,即Linux下的C函数库

# 设置descripation
SET(CPACK_PACKAGE_DESCRIPTION "just a cpack test")

# 设置联系方式
SET(CPACK_PACKAGE_CONTACT "[email protected]")

# 设置维护人
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "jason")

# 包含Cpack
include(CPack)

打包发布

在项目下开启终端运行:

mkdir buid && cd build
cmake ..
make 
make package

 成功生成deb包
我们用pkdg查看一下deb包的基本信息

 我们还可以看看deb包将要安装的路径所在

 最后分享一些dpkg相关常用命令

 三、个人总结

上面的haha包源码的效果在在中控台打印 haha,将其打包为deb包,安装好后,也没有多大用。要想起能有功能,那工作量应该不小。

对于笔者而言,将一个项目构建成静态库或动态库,或将可执行文件、库文件、头文件安装到别的地方,或许更有意义。举一个不太恰当的例子:新的电脑不用再安装一些软件,比如我已经将OpenCV的库文件、头文件和可执行文件安装好了。

参考:

【cmake篇】install 命令_仲夏夜之梦~的博客-CSDN博客

C++编译之(4)-进阶-cmake设置install及package配置_cmake install指令_丰色木夕的博客-CSDN博客

【cmake学习】cmake 引入第三方库(头文件目录、库目录、库文件)_cmake添加第三方库_仲夏夜之梦~的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_45824067/article/details/130809767
今日推荐