Sandbox/CMake: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «== Что такое CMake? == == == == Как собирать пакеты при помощи CMake == Пример 1 (простой). Вот фрагмен…»)
 
Строка 49: Строка 49:
%cmake_build
%cmake_build
</source>
</source>
=== Что писать в <tt>-D $args</tt>? ===
* Если проект включает в себя библиотеку для внешнего пользования — скорее всего, её стоит собрать как разделяемую; для этого стоит передать <tt>-DBUILD_SHARED_LIBS:BOOL=ON</tt>.
* Переменная <tt>CMAKE_BUILD_TYPE</tt> управляет т. н. "типом сборки", предусматривающим разное поведение (доп. флаги компиляции/линковки, ) для разных целей. Для генераторов <tt>Ninja</tt> и <tt>Unix Makefiles</tt>, применяемых на Linux, он может быть только один для конкретного каталога артефактов. Например, <tt>Debug</tt>, <tt>Release</tt>, <tt>MinSizeRel</tt>... В большинстве случаев рекомендуется передавать <tt>-DCMAKE_BUILD_TYPE=RelWithDebInfo</tt>.
* Проект, скорее всего, задаёт некоторые собственные флаги, от которых зависят сборочные действия. Их полный список можно увидеть, запустив <tt>cmake -LH</tt> в сборочном окружении.


== Ссылки ==
== Ссылки ==
* [https://cmake.org cmake.org]
* [https://cmake.org cmake.org]
* [https://cmake.org/cmake/help/latest/index.html Официальная документация]
* [https://cmake.org/cmake/help/latest/index.html Официальная документация]

Версия от 23:54, 4 мая 2021

Что такое 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 в сборочном окружении.

Ссылки