在cmake打包的时候,最常见的几个步骤就是:
#打开工程目录,即外层CMakeLists.txt所在的目录
$ mkdir build && cd build
$ cmake ..
$ make package
1、一些参考学习资料
比较全的资料:
https://blog.youkuaiyun.com/u012156872/category_11506985.html
参考资料:Cpack入门
https://zhuanlan.zhihu.com/p/141956373
camke install:
https://blog.youkuaiyun.com/qq_38410730/article/details/102837401
用CMake打包deb包流程完整版(带字段解析):
https://blog.youkuaiyun.com/qq_29935433/article/details/104684523
CMake 交叉编译学习(使用CPack打成deb包):
https://blog.youkuaiyun.com/micah2017/article/details/125127953
deb 包详解:
https://blog.youkuaiyun.com/weixin_42553314/article/details/118696651
2、一个比较通用的CMakeLists.txt ,包含打包流程
cmake_minimum_required(VERSION 3.5)
project(jt808-server)
set(JT808_VERSION_MAJOR 1)
set(JT808_VERSION_MINOR 0)
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wfatal-errors")
include_directories("${PROJECT_SOURCE_DIR}")
include_directories("${PROJECT_BINARY_DIR}")
add_subdirectory(bcd)
add_subdirectory(unix_socket)
add_subdirectory(common)
add_subdirectory(service)
add_executable(jt808service main/service_main.cc)
target_link_libraries(jt808service PRIVATE
jt808_service
)
add_executable(jt808command main/command_main.cc)
target_link_libraries(jt808command PRIVATE
unix_socket
)
##################################安装打包(通用)#######################################
#准备的版本设置
set (MAJOR_VERSION "1")
set (MINOR_VERSION "2")
set (PATCH_VERSION "3")
#设置架构
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
#说明要生成的是deb包
SET(CPACK_GENERATOR "DEB")
install(TARGETS jt808service
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
#设置版本信息
set (CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set (CPACK_PACKAGE_VERSION "1.0.1")
# set (CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}")
# set (CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}")
# set (CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}")
# 设置软件包版本
#set(CPACK_PACKAGE_VERSION "2.1")
# NOTE:当然cpack还提供了CPACK_PACKAGE_VERSION_MAJOR;
# CPACK_PACKAGE_VERSION_MINOR;
# CPACK_PACKAGE_VERSION_PATCH,
# 这三个合起来的功能和CPACK_PACKAGE_VERSION的作用是一样的
#message("${CPACK_PACKAGE_VERSION}")
#设置安装包的包名,打好的包将会是packagename-version-linux.deb,如果不设置,默认是工程名
#set(CPACK_PACKAGE_NAME "xcl")
#设置程序名,就是程序安装后的名字
set(CPACK_DEBIAN_PACKAGE_NAME "xiaole")
#获取编译时间
string(TIMESTAMP COMPILE_TIME %Y%m%d_%H%M%S)
set(build_time ${COMPILE_TIME})
#设置打出来的包名
set(CPACK_PACKAGE_FILE_NAME xcl-${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${COMPILE_TIME}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
#设置安装路径
set(CPACK_PACKAGING_INSTALL_PREFIX "/home/xcl/install")
#设置依赖
#set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
#设置需要打包的路径,如果未设置就是构建目录 也可以通过-B指定
#set(CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/jt808-server")
#设置包的供应商
set(CPACK_PACKAGE_VENDOR "CMAKE")
#设置包的描述文件
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/INSTALL.md")
#设置包简短的描述
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "this is a Jt808server CPack")
#设置description
SET(CPACK_PACKAGE_DESCRIPTION "jt808 service - xcl")
#设置包管理者联系方式和管理者维护人
set (CPACK_PACKAGE_CONTACT "xuchangle@163.com")
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "xuchangle")
#设置section
set(CPACK_DEBIAN_PACKAGE_SECTION "net")
#设置priority
set(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")
#以上都配置完后,最后加这句话
include(CPack)
##############debian/control设置完成了,下面设置控制脚本,动态库,changelog等#################
#lib目录下保存这一些动态库和安装控制脚本(postinst、postrm、preinst、prerm)
#doc目录下是changelog和copyright等文件
#SET(LIBS_DIR ${CMAKE_SOURCE_DIR}/lib)
#SET(DOCS_DIR ${CMAKE_SOURCE_DIR}/doc)
#打印
message("CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}")
message("PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
#设置控制脚本,这些都是打包者本人自己准备的,没有就算了
#set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
# "${CMAKE_SOURCE_DIR}/scripts/postinst;${CMAKE_SOURCE_DIR}/scripts/postrm;${CMAKE_SOURCE_DIR}/scripts/prerm")
#将文件安装时copy到某个目录下
INSTALL(FILES ${CMAKE_SOURCE_DIR}/jt808_log/config/zlog.conf DESTINATION /home/xcl/install/jt808_log/)
#将库文件安装到/usr/lib下
#INSTALL(FILES ${LIBS_DIR}/libdb-4.8.so ${LIBS_DIR}/libdbxml-2.5.so ${LIBS_DIR}/libxerces-c-3.0.so ${LIBS_DIR}/libxqilla.so.5 ${LIBS_DIR}/libxqilla.so.5.0.2 DESTINATION /usr/lib)
3、dpkg相关命令
#安装(解包并配置)
dpkg -i|--install <.deb file name>
#dpkg -i mydeb-1.deb
#强制安装
dpkg --force-depends -i mydeb-1.deb
#解包:该命令仅对 “mydeb-1.deb”进行解包操作,不会执行包配置工作
dpkg --unpack mydeb-1.deb
#卸载:删除包,但保留配置文件
dpkg -r|--remove <package>
# dpkg -r my-deb
#该命令删除包,且删除配置文件
dpkg -P|--purge my-deb
#查看deb包是否安装/deb包的信息
dpkg -s|--status <package>
# dpkg -s my-deb
#查看deb包文件内容
dpkg -c mydeb-1.deb
#查看当前目录某个deb包的信息
dpkg --info mydeb-1.deb
#解压deb中所要安装的文件
#第一个参数为所要解压的deb包,第二个参数为将deb包解压到指定的目录
dpkg -x mydeb-1.deb mydeb-1
#解压deb包中DEBIAN目录下的文件(至少包含control文件)
dpkg -e mydeb-1.deb mydeb-1/DEBIAN
#列出与该包关联的文件 dpkg -L|--listfiles <package>
dpkg -L my-deb
#配置软件包
dpkg --configure <package>
# dpkg --configure my-deb
#解压deb包中DEBIAN目录下的文件(至少包含control文件)
dpkg -e mydeb-1.deb mydeb-1/DEBIAN
#列出与该包关联的文件 dpkg -L|--listfiles <package>
dpkg -L my-deb
#配置软件包
dpkg --configure <package>
# dpkg --configure my-deb