| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- Step 12: Packaging Debug and Release
- ====================================
- **Note:** This example is valid for single-configuration generators and will
- not work for multi-configuration generators (e.g. Visual Studio).
- By default, CMake's model is that a build directory only contains a single
- configuration, be it Debug, Release, MinSizeRel, or RelWithDebInfo. It is
- possible, however, to setup CPack to bundle multiple build directories and
- construct a package that contains multiple configurations of the same project.
- First, we want to ensure that the debug and release builds use different names
- for the executables and libraries that will be installed. Let's use `d` as the
- postfix for the debug executable and libraries.
- Set :variable:`CMAKE_DEBUG_POSTFIX` near the beginning of the top-level
- ``CMakeLists.txt`` file:
- .. literalinclude:: Complete/CMakeLists.txt
- :caption: CMakeLists.txt
- :name: CMakeLists.txt-CMAKE_DEBUG_POSTFIX-variable
- :language: cmake
- :start-after: project(Tutorial VERSION 1.0)
- :end-before: target_compile_features(tutorial_compiler_flags
- And the :prop_tgt:`DEBUG_POSTFIX` property on the tutorial executable:
- .. literalinclude:: Complete/CMakeLists.txt
- :caption: CMakeLists.txt
- :name: CMakeLists.txt-DEBUG_POSTFIX-property
- :language: cmake
- :start-after: # add the executable
- :end-before: # add the binary tree to the search path for include files
- Let's also add version numbering to the ``MathFunctions`` library. In
- ``MathFunctions/CMakeLists.txt``, set the :prop_tgt:`VERSION` and
- :prop_tgt:`SOVERSION` properties:
- .. literalinclude:: Complete/MathFunctions/CMakeLists.txt
- :caption: MathFunctions/CMakeLists.txt
- :name: MathFunctions/CMakeLists.txt-VERSION-properties
- :language: cmake
- :start-after: # setup the version numbering
- :end-before: # install rules
- From the ``Step12`` directory, create ``debug`` and ``release``
- subbdirectories. The layout will look like:
- .. code-block:: none
- - Step12
- - debug
- - release
- Now we need to setup debug and release builds. We can use
- :variable:`CMAKE_BUILD_TYPE` to set the configuration type:
- .. code-block:: console
- cd debug
- cmake -DCMAKE_BUILD_TYPE=Debug ..
- cmake --build .
- cd ../release
- cmake -DCMAKE_BUILD_TYPE=Release ..
- cmake --build .
- Now that both the debug and release builds are complete, we can use a custom
- configuration file to package both builds into a single release. In the
- ``Step12`` directory, create a file called ``MultiCPackConfig.cmake``. In this
- file, first include the default configuration file that was created by the
- :manual:`cmake <cmake(1)>` executable.
- Next, use the ``CPACK_INSTALL_CMAKE_PROJECTS`` variable to specify which
- projects to install. In this case, we want to install both debug and release.
- .. literalinclude:: Complete/MultiCPackConfig.cmake
- :caption: MultiCPackConfig.cmake
- :name: MultiCPackConfig.cmake
- :language: cmake
- From the ``Step12`` directory, run :manual:`cpack <cpack(1)>` specifying our
- custom configuration file with the ``config`` option:
- .. code-block:: console
- cpack --config MultiCPackConfig.cmake
|