以前写的程序都是自己布局DEBIAN结构,这次的项目是用cmake管理的,也是第一次接触,想想这东西应该能自动打包了吧,毕竟cmake高大上啊!
找了一下,还真行,cpack就是cmake提供的一个打包工具。
下面是CMakeLists.txt关于打包部分的设置:
#准备的版本设置
set(_VERSION_MAJOR 1)
set(_VERSION_MINOR 0)
set(_VERSION_PATCH 0)
#说明要生成的是deb包
set(CPACK_GENERATOR "DEB")
############下面是设置debian/control文件中的内容
#设置版本信息
set(CPACK_PACKAGE_VERSION_MAJOR "${_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${_VERSION_PATCH}")
#设置安装包的包名,打好的包将会是packagename-version-linux.deb,如果不设置,默认是工程名
set(CPACK_PACKAGE_NAME "packagename")
#设置程序名,就是程序安装后的名字
set(CPACK_DEBIAN_PACKAGE_NAME "projectname")
#设置架构
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
#设置依赖
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, libdbus-1-3, libqt5dbus5, libqt5core5a, libqt5gui5, libqt5webkit5, libqt5network5, ssh, sshfs")
#设置section
set(CPACK_DEBIAN_PACKAGE_SECTION "net")
#设置priority
set(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")
#设置description
set(CPACK_PACKAGE_DESCRIPTION "description")
#设置联系方式
set(CPACK_PACKAGE_CONTACT "support@xxx.cn")
#设置维护人
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "members of support@xxx.cn")
##############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)
#设置控制脚本,这些都是大包者本人自己准备的,没有就算了
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${LIBS_DIR}/postinst;${LIBS_DIR}/postrm;${LIBS_DIR}/prerm")
#把动态库文件安装到指定的位置,这些动态库是程序必须依赖的且无法通过其他方法安装,所以我只能想到用这种笨办法来设置了。
install(FILES ${LIBS_DIR}/libqca-gnupg.so ${LIBS_DIR}/libqca-logger.so DESTINATION /usr/lib/x86_64-linux-gnu/)
#最后把我们的changelog等东西也加进来,project是你的工程名
install(FILES ${DOCS_DIR}/changelog.Debian.gz ${DOCS_DIR}/changelog.gz ${DOCS_DIR}/copyright ${DOCS_DIR}/README.Debian DESTINATION /usr/share/doc/project)
#最后 别忘记最重要的 我们使用cpack工具来实现打包工作的
<span style="color:#FF0000;">include(CPack)</span>
设置完成后,打包操作:
首先打开工程目录,也是CMakeLists.txt所在的目录。
$ mkdir build && cd build
$ cmake ..
$ make package
等待编译打包结束就行了,在build目录下就看到deb包了。
参考资料:
网址可能要fanqiang
https://www.debian.org/doc/manuals/maint-guide/dreq.zh-cn.html
https://cmake.org/cmake/help/v2.8.12/cpack.html#variable:CPACK_RPM_CHANGELOG_FILE
https://cmake.org/cmake/help/v3.0/module/CPackDeb.html
https://cmake.org/Wiki/CMake:CPackConfiguration
https://cmake.org/cmake/help/v3.0/command/install.html
https://cmake.org/Wiki/CMake:CPackPackageGenerators
https://cmake.org/Wiki/CMakeUserUseDebian