http://www.cnblogs.com/457220157-FTD/p/4157497.html
一. 简介
CPack是CMake 2.4.2之后的一个内置工具,主要作用就是生成制定类型的安装包.它可以脱离cmake单独运行.
二. 基本设置 (mandatory)
- 设置包类型
set(CPACK_GENERATOR "DEB")
NOTE:参数可以是你所知道的任意压缩包类型,rpm,tar.gz等等,请参见官方wiki
- 设置软件包版本
set(CPACK_PACKAGE_VERSION "2.1")
NOTE:当然cpack还提供了CPACK_PACKAGE_VERSION_MAJOR/CPACK_PACKAGE_VERSION_MINOR/CPACK_PACKAGE_VERSION,
这三个合起来的功能和CPACK_PACKAGE_VERSION的作用是一样的
- 设置软件包名称
set(CPACK_PACKAGE_NAME "omatrix")
- 设置软件包装位置
set(CPACK_SET_DESTDIR true)
set(CPACK_INSTALL_PREFIX "/opt/omatrix/")
- 设置软件包生成的位置
set(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_CURRENT_SOURCE_DIR})
- 设置维护者信息
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "EFlag")
- 设置描述文件
set(CPACK_PACKAGE_DESCRIPTION "OMatrix core to capture and decode the traffic")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY, "Packet capturing and decoding")
- 设置安装包约束关系
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc7 (>= 2.3.1-6) ")
- 设置自动执行脚本(这一项比较重要)
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_SOURCE_DIR}/DEBIAN/postrm;")
基本上所有的安装包都会在安装之前或这安装之后执行一些操作,这就需要用到这个选项.
总共有四种脚本:preinst(安装前执行), postinst(安装后执行), prerm(删除前执行), postrm(删除后执行)
还要注意的就是这些脚本的权限问题,不要使用chmod u+x来赋权限,最好使用chmod 0777
- 这一句放在CMakeLists.txt文件最后,不能少
include(CPack)
三. 语法
在cpack中你要掌握的唯一语法就是install, 这个主要就是在制作安装包的过程中调用的
- 目标文件
install(TARGETS <targets>
[[ARCHIVE|LIBRARY|RUNTIME]
[DESTINATION <dir>]
[PERMISSIONS <permissions>
[Debug|Release..]]
[COMPONENT <component>]
[OPTIONAL]
][...])
简单例子:
INSTALL(TARGETS myrun mylib mystaticlib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION libstatic
)
上面的例子会将:
可执行二进制 myrun 安装到${CMAKE_INSTALL_PREFIX}/bin 目录
动态库 libmylib 安装到${CMAKE_INSTALL_PREFIX}/lib 目录
静态库 libmystaticlib 安装到${CMAKE_INSTALL_PREFIX}/libstatic 目录
特别注意的是你不需要关心 TARGETS 具体生成的路径,只需要写上 TARGETS 名称就可以了
- 非目标文件的可执行程序(当然也可以是目标文件的可执行程序)
INSTALL(PROGRAMS files... DESTINATION <dir>
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[RENAME <name>] [OPTIONAL])
简单例子:
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/control DESTINATION opt/omatrix/bin)
将control安装到/opt/omatrix/bin下
- 普通文件的安装:
INSTALL(FILES files... DESTINATION <dir>
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[RENAME <name>] [OPTIONAL])
- 目录的安装:
INSTALL(DIRECTORY dirs... DESTINATION <dir>
[FILE_PERMISSIONS permissions...]
[DIRECTORY_PERMISSIONS permissions...]
[USE_SOURCE_PERMISSIONS]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[[PATTERN <pattern> | REGEX <regex>]
[EXCLUDE] [PERMISSIONS permissions...]] [...])
简单例子:
install(DIRECTORY tool DESTINATION ${INSTALL_PATH}
FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
- 在安装的时候执行一些shell命令
install(CODE
"EXECUTE_PROCESS(COMMAND cp -r /opt/omatrix/lib ${CMAKE_SOURCE_DIR})"
)
install(CODE
"execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/lib/.svn ${CMAKE_SOURCE_DIR}/lib/capture/.svn)"
)
四. 生成安装包命令
make package
基本上有了这些就可以制作出你自己的安装包了