|
|
# Introduction
|
|
|
|
|
|
*CPack* is a powerful, easy to use, cross-platform software packaging
|
|
|
tool distributed with [CMake](http://www.cmake.org) since version 2.4.2.
|
|
|
It uses the [generators](CMake%3ACPackPackageGenerators "wikilink")
|
|
|
concept from CMake, to abstract package generation on specific
|
|
|
platforms, and it can be used with or without CMake.
|
|
|
|
|
|
Using either a simple configuration file or the CMake module, a complex
|
|
|
project can be packaged into an installer.
|
|
|
|
|
|
# Using CPack without CMake
|
|
|
|
|
|
CPack can be used directly by specifying a CPackConfig.cmake file, which
|
|
|
uses CMake syntax and defines several variables. Here is an example
|
|
|
CPackConfig.cmake file for a Linux system:
|
|
|
|
|
|
<nowiki>SET(CPACK_CMAKE_GENERATOR "Unix Makefiles")
|
|
|
SET(CPACK_GENERATOR "STGZ;TGZ;TZ")
|
|
|
SET(CPACK_INSTALL_CMAKE_PROJECTS "/home/andy/vtk/CMake-bin;CMake;ALL;/")
|
|
|
SET(CPACK_NSIS_DISPLAY_NAME "CMake 2.5")
|
|
|
SET(CPACK_OUTPUT_CONFIG_FILE "/home/andy/vtk/CMake-bin/CPackConfig.cmake")
|
|
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "/home/andy/vtk/CMake/Copyright.txt")
|
|
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake is a build tool")
|
|
|
SET(CPACK_PACKAGE_EXECUTABLES "ccmake;CMake")
|
|
|
SET(CPACK_PACKAGE_FILE_NAME "cmake-2.5.0-Linux-i686")
|
|
|
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake 2.5")
|
|
|
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "CMake 2.5.0")
|
|
|
SET(CPACK_PACKAGE_NAME "CMake")
|
|
|
SET(CPACK_PACKAGE_VENDOR "Kitware")
|
|
|
SET(CPACK_PACKAGE_VERSION "2.5.0")
|
|
|
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
|
|
|
SET(CPACK_PACKAGE_VERSION_MINOR "5")
|
|
|
SET(CPACK_PACKAGE_VERSION_PATCH "0")
|
|
|
SET(CPACK_RESOURCE_FILE_LICENSE "/home/andy/vtk/CMake/Copyright.txt")
|
|
|
SET(CPACK_RESOURCE_FILE_README "/home/andy/vtk/CMake/Templates/CPack.GenericDescription.txt")
|
|
|
SET(CPACK_RESOURCE_FILE_WELCOME "/home/andy/vtk/CMake/Templates/CPack.GenericWelcome.txt")
|
|
|
SET(CPACK_SOURCE_GENERATOR "TGZ;TZ")
|
|
|
SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/andy/vtk/CMake-bin/CPackSourceConfig.cmake")
|
|
|
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "cmake-2.5.0")
|
|
|
SET(CPACK_SOURCE_STRIP_FILES "")
|
|
|
SET(CPACK_STRIP_FILES "bin/ccmake;bin/cmake;bin/cpack;bin/ctest")
|
|
|
SET(CPACK_SYSTEM_NAME "Linux-i686")
|
|
|
SET(CPACK_TOPLEVEL_TAG "Linux-i686")</nowiki>
|
|
|
|
|
|
These variables can also be overwritten on the command line using the
|
|
|
option
|
|
|
"-D":
|
|
|
|
|
|
cpack -D CPACK_PACKAGE_VENDOR=Me -D CPACK_SYSTEM_NAME=super-duper-linux ...
|
|
|
|
|
|
# Using CPack with CMake
|
|
|
|
|
|
CMake comes with a CPack module, which will automatically generate an
|
|
|
appropriate CPack configuration file. To use the module, simply invoke
|
|
|
the following command (BTW, failure to do so will result in an annoying
|
|
|
"CPack Error: CPack project name not specified" message...):
|
|
|
|
|
|
<nowiki>INCLUDE(CPack)</nowiki>
|
|
|
|
|
|
This generates a new target called *"package"* in your build system.
|
|
|
When this target is built, CPack will be invoked to generate all of the
|
|
|
packages. Internally, CPack will use [CMake's install
|
|
|
mechanism](CMake%3AInstall_Commands "wikilink") to automatically populate
|
|
|
the package.
|
|
|
|
|
|
An example output of the *"package"* target (from a Linux Makefile) is:
|
|
|
|
|
|
<nowiki>Run CPack packaging tool...
|
|
|
CPack: Create package using STGZ
|
|
|
CPack: Install projects
|
|
|
CPack: - Run preinstall target for: CMake
|
|
|
CPack: - Install project: CMake
|
|
|
CPack: - Strip files
|
|
|
CPack: Compress package
|
|
|
CPack: Finalize package
|
|
|
CPack: Package /home/andy/CMake-bin/cmake-2.5.0-Linux-i686.sh generated.
|
|
|
CPack: Create package using TGZ
|
|
|
CPack: Install projects
|
|
|
CPack: - Run preinstall target for: CMake
|
|
|
CPack: - Install project: CMake
|
|
|
CPack: - Strip files
|
|
|
CPack: Compress package
|
|
|
CPack: Finalize package
|
|
|
CPack: Package /home/andy/CMake-bin/cmake-2.5.0-Linux-i686.tar.gz generated.
|
|
|
CPack: Create package using TZ
|
|
|
CPack: Install projects
|
|
|
CPack: - Run preinstall target for: CMake
|
|
|
CPack: - Install project: CMake
|
|
|
CPack: - Strip files
|
|
|
CPack: Compress package
|
|
|
CPack: Finalize package
|
|
|
CPack: Package /home/andy/CMake-bin/cmake-2.5.0-Linux-i686.tar.Z generated.</nowiki>
|
|
|
|
|
|
## Using CMake variables to configure CPack
|
|
|
|
|
|
To configure CPack, it is possible to define [CPack
|
|
|
variables](CMake%3ACPackConfiguration "wikilink") inside a CMake file.
|
|
|
These variables will be copied across to the generated CPackConfig.cmake
|
|
|
file before CPack is invoked.
|
|
|
|
|
|
This is an example CMake list section for CPack configuration:
|
|
|
|
|
|
<nowiki>
|
|
|
INCLUDE(InstallRequiredSystemLibraries)
|
|
|
|
|
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "My funky project")
|
|
|
SET(CPACK_PACKAGE_VENDOR "Me, myself, and I")
|
|
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
|
|
|
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
|
|
|
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
|
|
|
SET(CPACK_PACKAGE_VERSION_MINOR "3")
|
|
|
SET(CPACK_PACKAGE_VERSION_PATCH "2")
|
|
|
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
|
|
|
IF(WIN32 AND NOT UNIX)
|
|
|
# There is a bug in NSI that does not handle full unix paths properly. Make
|
|
|
# sure there is at least one set of four (4) backlasshes.
|
|
|
SET(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp")
|
|
|
SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe")
|
|
|
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} My Famous Project")
|
|
|
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.my-project-home-page.org")
|
|
|
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.my-personal-home-page.com")
|
|
|
SET(CPACK_NSIS_CONTACT "me@my-personal-home-page.com")
|
|
|
SET(CPACK_NSIS_MODIFY_PATH ON)
|
|
|
ELSE(WIN32 AND NOT UNIX)
|
|
|
SET(CPACK_STRIP_FILES "bin/MyExecutable")
|
|
|
SET(CPACK_SOURCE_STRIP_FILES "")
|
|
|
ENDIF(WIN32 AND NOT UNIX)
|
|
|
SET(CPACK_PACKAGE_EXECUTABLES "MyExecutable" "My Executable")
|
|
|
INCLUDE(CPack)</nowiki>
|
|
|
|
|
|
## CPack Generators
|
|
|
|
|
|
There are several [generators](CMake%3ACPackPackageGenerators "wikilink")
|
|
|
usable with CPack.
|
|
|
|
|
|
# Example
|
|
|
|
|
|
Here is an [example](CMake/CPack/Examples/Linux/DEB "wikilink").
|
|
|
|
|
|
# Debugging
|
|
|
|
|
|
A very detailed log of CPack execution steps can be obtained via cpack
|
|
|
--debug --verbose (which, as a side note, are features that are awfully
|
|
|
hidden at least in older versions of CPack).
|
|
|
|
|
|
----
|
|
|
This page was initially populated by conversion from its [original location](https://public.kitware.com/Wiki/CMake:Packaging_With_CPack) in another wiki. |