Sandbox/CMake
Версия от 23:54, 4 мая 2021; ArsenyMaslennikov (обсуждение | вклад) (→Как собирать пакеты при помощи CMake)
Что такое CMake?
Как собирать пакеты при помощи CMake
Пример 1 (простой). Вот фрагмент спека:
%build
%cmake \
$args \
#
%cmake_build
%install
%cmake_install
Он эквивалентен следующему фрагменту:
%build
cmake -S . -B %_target_platform \
$args \
#
cmake --build %_target_platform -j%__nprocs --verbose
%install
DESTDIR=%buildroot cmake --install %_target_platform --verbose
$args могут включать в себя опции конфигурационного шага: -DX=Y, -G $generator, ...
Иногда cmake-проект описывает несколько сборочных целей, и можно собрать одну или несколько из них:
%cmake_build -t $target
Пример 2 (несколько сборочных конфигураций):
%build
%define _cmake__builddir Build1
%cmake $args1
%cmake_build
%define _cmake__builddir Build2
%cmake $args2
%cmake_build
%define _cmake__builddir Build3
%cmake $args3
%cmake_build
Что писать в -D $args?
- Если проект включает в себя библиотеку для внешнего пользования — скорее всего, её стоит собрать как разделяемую; для этого стоит передать -DBUILD_SHARED_LIBS:BOOL=ON.
- Переменная CMAKE_BUILD_TYPE управляет т. н. "типом сборки", предусматривающим разное поведение (доп. флаги компиляции/линковки, ) для разных целей. Для генераторов Ninja и Unix Makefiles, применяемых на Linux, он может быть только один для конкретного каталога артефактов. Например, Debug, Release, MinSizeRel... В большинстве случаев рекомендуется передавать -DCMAKE_BUILD_TYPE=RelWithDebInfo.
- Проект, скорее всего, задаёт некоторые собственные флаги, от которых зависят сборочные действия. Их полный список можно увидеть, запустив cmake -LH в сборочном окружении.