CMake-paketoinnin ohjeet
This document provides best practices for the usage of the CMake build system in Fedora packages.
Available Macros
You will generally make use of these in your specs:
%cmake
-
Defines CFLAGS, LDFLAGS, etc. and calls
%__cmake
with appropriate parameters (-DCMAKE_INSTALL_PREFIX:PATH=/usr
and such). You can pass-Doption=value
to this macro in order to set options for the buildsystem. %cmake_build
-
Builds the project (using
%__cmake --build
). %cmake_install
-
Installs the built project (using
%__cmake --install
). %ctest
-
Runs the tests that are defined with
add_test()
in project (using%__ctest
).
When packaging KDE software, you most likely would replace %cmake
with either %cmake_kf5
or %cmake_kf6
. For more information, see KDE Packaging Guidelines.
It is rarely necessary (but permissible) to use or alter these:
All macros starting with double underscore is meant to be private, NOT stable and likely to be removed in the future. |
%__cmake
-
The path to the cmake executable.
%__ctest
-
The path to the ctest executable.
%__cmake_in_source_build
-
Controls whether builds are done out-of-source (when undefined, the default) or in-source (when defined). Whenever possible, using out-of-source builds is advised, as this is the direction both Fedora and CMake upstream are moving.
%__cmake_builddir
-
Holds the location of the actual directory where the build was made. When making out-of-source builds, this macro is the same as %_vpath_builddir. When doing in-source builds, this macro will hold the actual location that was used for the build.
This macro is suitable only for rare compatibility reasons. For normal out-of-source builds, this macro is the same as %_vpath_builddir
. It may be removed in the future.
Huomautukset
-DCMAKE_SKIP_RPATH:BOOL=ON
. With recent cmake-2.4, it should not be used. This CMake version should handle RPATHs issues correctly (set them in build-dir, remove them during installation). Setting CMAKE_SKIP_RPATH
for this version would avoid RPATHs in build-dir too. This might link binaries against system-libraries (e.g. when a previous version of the package was installed) instead of the libraries which were created by the build.
Nevertheless, RPATH issues might arise when CMake was used improperly. For example, installing a target with INSTALL(FILES ... RENAME ...)
will not strip rpaths; in this case INSTALL(TARGETS ...)
must be used in combination with changing the OUTPUT_NAME
property.
CMake has good documentation in two places:
Want to help? Learn how to contribute to Fedora Docs ›