cmake(1)
Краткое описание
Generate a Project Buildsystem cmake [<options>] <path-to-source | path-to-existing-build> cmake [<options>] -S <path-to-source> -B <path-to-build> Build a Project cmake --build <dir> [<options>] [-- <build-tool-options>] Install a Project cmake --install <dir> [<options>] Open a Project cmake --open <dir> Run a Script cmake [-D <var>=<value>]... -P <cmake-script-file> Run a Command-Line Tool cmake -E <command> [<options>] Run the Find-Package Tool cmake --find-package [<options>] Run a Workflow Preset cmake --workflow [<options>] View Help cmake --help[-<topic>]
Описание
Исполняемый файл cmake — это командная строка генератора кроссплатформенной системы сборки CMake. Вышеприведённое Краткое описание перечисляет различные действия, которые инструмент может выполнить, как описано в разделах ниже.
Чтобы собрать проект программного обеспечения с помощью CMake, Сгенерируйте систему сборки проекта. При необходимости используйте cmake для сборки проекта, установки проекта или просто запустите соответствующий инструмент сборки (например, make) напрямую. cmake также можно использовать для просмотра справки.
Другие действия предназначены для использования разработчиками программного обеспечения, пишущими скрипты на языке CMake language для поддержки своих сборок.
Для графических пользовательских интерфейсов, которые могут использоваться вместо cmake, см. ccmake и cmake-gui. Для командных интерфейсов к средствам тестирования и упаковки CMake см. ctest и cpack.
Для получения дополнительной информации о CMake в целом, см. см. также ссылки в конце этого руководства.
Введение в системы сборки CMake
Система сборки описывает, как создать исполняемые файлы и библиотеки проекта из исходного кода с помощью инструмента сборки, автоматизирующего процесс. Например, системой сборки может быть Makefile для использования с командной строкой make или файлом проекта для интегрированной среды разработки (IDE). Для того, чтобы избежать поддержки нескольких таких систем сборки, проект может указать свою систему сборки абстрактно с помощью файлов, написанных на языке CMake language. Из этих файлов CMake генерирует предпочтительную локальную систему сборки для каждого пользователя через бэкенд, называемый генератором.
Для генерации системы сборки с помощью CMake необходимо выбрать следующее:
- Дерево исходных файлов
-
Директория верхнего уровня, содержащая исходные файлы, предоставленные проектом. Проект указывает свою систему сборки с помощью файлов, как описано в руководстве
cmake-language(7), начиная с файла верхнего уровня, названногоCMakeLists.txt. Эти файлы указывают целевые объекты сборки и их зависимости, как описано в руководствеcmake-buildsystem(7). - Дерево сборки
-
Директория верхнего уровня, в которой будут храниться файлы системы сборки и артефакты выходных данных сборки (например, исполняемые файлы и библиотеки). CMake запишет файл
CMakeCache.txtдля идентификации директории как дерева сборки и сохранит постоянную информацию, такую как параметры конфигурации системы сборки.Для поддержания чистого дерева исходных файлов выполните сборку вне исходного кода, используя отдельное выделенное дерево сборки. Сборка внутри исходного кода, в которой дерево сборки размещается в той же директории, что и дерево исходных файлов, также поддерживается, но не рекомендуется.
- Генератор
-
Это выбирает тип системы сборки для генерации. См. руководство
cmake-generators(7)для документации всех генераторов. Запуститеcmake --help, чтобы увидеть список доступных локально генераторов. При необходимости используйте параметр-Gниже, чтобы указать генератор, или просто примите значение по умолчанию, выбранное CMake для текущей платформы.При использовании одного из Генераторов инструментов сборки командной строки CMake ожидает, что среда, необходимая для инструмента сборки, уже настроена в оболочке. При использовании одного из Генераторов инструментов сборки IDE никакая особая среда не требуется.
Сгенерировать систему сборки проекта
Запустите CMake с одной из следующих команд, чтобы указать деревья исходных файлов и сборки и сгенерировать систему сборки:
-
cmake [<options>] <path-to-source> -
Использует текущую рабочую директорию в качестве дерева сборки и
<path-to-source>в качестве дерева исходных файлов. Указанный путь может быть абсолютным или относительным к текущей рабочей директории. Дерево исходных файлов должно содержать файлCMakeLists.txtи не должно содержать файлCMakeCache.txt, так как последний идентифицирует существующее дерево сборки. Например:$ mkdir build ; cd build $ cmake ../src
-
cmake [<options>] <path-to-existing-build> -
Использует
<path-to-existing-build>в качестве дерева сборки и загружает путь к дереву исходных файлов из файлаCMakeCache.txt, который должен быть уже сгенерирован предыдущим запуском CMake. Указанный путь может быть абсолютным или относительным к текущей рабочей директории. Например:$ cd build $ cmake .
cmake [<options>] -S <path-to-source> -B <path-to-build>
Новое в версии 3.13.
Использует <path-to-build> в качестве дерева сборки и <path-to-source> в качестве дерева исходных файлов. Указанные пути могут быть абсолютными или относительными к текущей рабочей директории. Дерево исходных файлов должно содержать файл CMakeLists.txt. Дерево сборки будет создано автоматически, если оно ещё не существует. Например:
$ cmake -S src -B build
Во всех случаях <options> может быть нулём или более параметров ниже.
Указанные выше стили для указания деревьев исходных файлов и сборки могут быть смешаны. Пути, указанные с -S или -B, всегда классифицируются как деревья исходных или сборки соответственно. Пути, указанные с обычными аргументами, классифицируются на основе их содержимого и типов путей, указанных ранее. Если указан только один тип пути, для другого используется текущая рабочая директория (cwd). Например:
Командная строка | Дир. исходных файлов | Дир. сборки |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Изменено в версии 3.23: CMake предупреждает, когда указано несколько путей к исходным файлам. Это никогда официально не документировалось и не поддерживалось, но старые версии случайно принимали несколько путей к исходным файлам и использовали последний указанный путь. Избегайте передачи нескольких аргументов путей к исходным файлам.
После генерации системы сборки можно использовать соответствующий собственный инструмент сборки для сборки проекта. Например, после использования генератора Unix Makefiles можно запустить make напрямую:
$ make $ make install
В качестве альтернативы можно использовать cmake для сборки проекта, автоматически выбирая и вызывая соответствующий собственный инструмент сборки.
Параметры
-
-S <path-to-source> -
Путь к корневой директории проекта CMake для сборки.
-
-B <path-to-build> -
Путь к директории, которую CMake будет использовать в качестве корня директории сборки.
Если директория ещё не существует, CMake создаст её.
-
-C <initial-cache> -
Предварительная загрузка скрипта для заполнения кэша.
Когда CMake впервые запускается в пустом дереве сборки, он создаёт файл
CMakeCache.txtи заполняет его настраиваемыми параметрами для проекта. Этот параметр может использоваться для указания файла, из которого следует загрузить записи кэша перед первым проходом по файлам CMake проекта. Загруженные записи имеют приоритет над значениями по умолчанию проекта. Указанный файл должен быть скриптом CMake, содержащим командыset(), использующие параметрCACHE, а не файл формата кэша.Ссылки на
CMAKE_SOURCE_DIRиCMAKE_BINARY_DIRвнутри скрипта соответствуют корневому дереву исходных файлов и сборки.
-
-D <var>:<type>=<value>, -D <var>=<value> -
Создать или обновить запись CMake
CACHE.Когда CMake впервые выполняется в пустом дереве сборки, он создаёт файл
CMakeCache.txtи заполняет его настраиваемыми параметрами проекта. Этот параметр можно использовать для указания параметра, который имеет приоритет над значением по умолчанию проекта. Параметр можно повторять для любого количестваCACHEзаписей, сколько необходимо.Если указана часть
:<type>, она должна быть одним из типов, указанных в документации командыset()для еёCACHEподписи. Если часть:<type>опущена, запись будет создана без типа, если она не существует с уже существующим типом. Если команда в проекте задаёт типPATHилиFILEPATH, то<value>будет преобразовано в абсолютный путь.Этот параметр также может быть задан как один аргумент:
-D<var>:<type>=<value>или-D<var>=<value>.Важно отметить, что порядок аргументов
-Cи-Dважен. Они будут выполняться в порядке их перечисления, причём последний аргумент имеет приоритет над предыдущими. Например, если вы укажете-DCMAKE_BUILD_TYPE=Debug, а затем аргумент-Cс файлом, который вызывает:set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
то аргумент
-Cбудет иметь приоритет, иCMAKE_BUILD_TYPEбудет установлено вRelease. Однако, если аргумент-Dследует за аргументом-C, он будет установлен вDebug.Если вызов
set(... CACHE ...)в файле-Cне используетFORCE, и аргумент-Dустанавливает ту же переменную, аргумент-Dбудет иметь приоритет независимо от порядка, из-за природы вызововFORCEset(... CACHE ...).
-
-U <globbing_expr> -
Удалить соответствующие записи из кэша CMake
CACHE.Этот параметр можно использовать для удаления одной или нескольких переменных из файла
CMakeCache.txt; поддерживаются выражения сопоставления с образцом, используя*и?. Параметр можно повторять для любого количестваCACHEзаписей.Используйте с осторожностью, вы можете сделать свой
CMakeCache.txtнеработающим.
-
-G <generator-name> -
Указать генератор системы сборки.
CMake может поддерживать несколько собственных систем сборки на определённых платформах. Генератор отвечает за создание конкретной системы сборки. Возможные имена генераторов указаны в руководстве
cmake-generators(7).Если не указано, CMake проверяет переменную среды
CMAKE_GENERATORи в противном случае возвращается к встроенному выбору по умолчанию.
-
-T <toolset-spec> -
Указание набора инструментов для генератора, если он поддерживается.
Некоторые генераторы CMake поддерживают указание набора инструментов, чтобы сказать собственной системе сборки, как выбрать компилятор. Подробности см. в переменной
CMAKE_GENERATOR_TOOLSET.
-
-A <platform-name> -
Указать имя платформы, если оно поддерживается генератором.
Некоторые генераторы CMake поддерживают имя платформы, которое должно быть передано собственной системе сборки, чтобы выбрать компилятор или SDK. Подробности см. в переменной
CMAKE_GENERATOR_PLATFORM.
-
--toolchain <path-to-file> -
Указать файл инструментальной цепочки кросс-компиляции, эквивалентно установке переменной
CMAKE_TOOLCHAIN_FILE.
-
--install-prefix <directory> -
Указать каталог установки, используемый переменной
CMAKE_INSTALL_PREFIX. Должен быть абсолютным путём.
-
-Wno-dev -
Отключить предупреждения разработчиков.
Отключить предупреждения, предназначенные для автора файлов
CMakeLists.txt. По умолчанию это также выключает предупреждения о устаревших функциях.
-
-Wdev -
Включить предупреждения разработчиков.
Включить предупреждения, предназначенные для автора файлов
CMakeLists.txt. По умолчанию это также включает предупреждения о устаревших функциях.
-
-Wdeprecated -
Включить предупреждения об устаревших функциях.
Включить предупреждения об использовании устаревших функций, которые предназначены для автора файлов
CMakeLists.txt.
-
-Wno-deprecated -
Отключить предупреждения об устаревших функциях.
Отключить предупреждения об использовании устаревших функций, которые предназначены для автора файлов
CMakeLists.txt.
-
-Werror=<what> -
Обрабатывать предупреждения CMake как ошибки.
<what>должно быть одним из следующих:-
dev -
Преобразовать предупреждения разработчиков в ошибки.
Преобразовать предупреждения, предназначенные для автора файлов
CMakeLists.txtв ошибки. По умолчанию это также включает предупреждения об устаревших функциях как ошибки. -
deprecated -
Преобразовать предупреждения об устаревших макросах и функциях в ошибки.
Преобразовать предупреждения об использовании устаревших макросов и функций, которые предназначены для автора файлов
CMakeLists.txtв ошибки.
-
-
-Wno-error=<what> -
Не обрабатывать предупреждения CMake как ошибки.
<what>должно быть одним из следующих:-
dev -
Преобразовать предупреждения, предназначенные для автора файлов
CMakeLists.txtв не ошибки. По умолчанию это также выключает предупреждения об устаревших функциях как ошибки. -
deprecated -
Преобразовать предупреждения об использовании устаревших макросов и функций, которые предназначены для автора файлов
CMakeLists.txtв не ошибки.
-
-
--fresh -
Новое в версии 3.24.
Выполнить свежую конфигурацию дерева сборки. Это удаляет любой существующий файл
CMakeCache.txtи связанную директориюCMakeFiles/и создаёт их заново с нуля.
-
-L[A][H] -
Отобразить не продвинутые кэшированные переменные.
Отображение переменных
CACHEвыполнит CMake и отобразит все переменные из кэша CMakeCACHE, которые не помечены какINTERNALилиADVANCED. Это фактически отобразит текущие настройки CMake, которые можно изменить с помощью параметра-D. Изменение некоторых переменных может привести к созданию большего количества переменных. ЕслиAуказано, то отображаются и продвинутые переменные. ЕслиHуказано, отображается также справка по каждой переменной.
-
-N -
Только режим просмотра.
Только загрузить кэш. Не выполнять фактически шаги конфигурации и генерации.
-
--graphviz=<file> -
Сгенерировать граф graphviz зависимостей, см.
CMakeGraphVizOptionsдля получения дополнительной информации.Сгенерировать входной файл graphviz, который будет содержать все зависимости библиотек и исполняемых файлов в проекте. Смотрите документацию по
CMakeGraphVizOptionsдля получения дополнительной информации.
-
--system-information [file] -
Вывести информацию об этой системе.
Вывести широкий спектр информации об текущей системе. Если запуск осуществляется из начала дерева бинарных файлов для проекта CMake, он выведет дополнительную информацию, такую как кэш, файлы журнала и т.д.
-
--log-level=<level> -
Установите уровень ведения
<level>.Команда
message()будет выводить только сообщения указанного уровня или выше. Допустимые уровни ведения —ERROR,WARNING,NOTICE,STATUS(по умолчанию),VERBOSE,DEBUG, илиTRACE.Чтобы уровень ведения сохранялся между запусками CMake, установите
CMAKE_MESSAGE_LOG_LEVELкак переменную кэша. Если заданы как параметр командной строки, так и переменная, приоритет отдаётся параметру командной строки.Для обратной совместимости,
--loglevelтакже принимается как синоним этого параметра.Введено в версии 3.25: Смотрите команду
cmake_language()для способа получить текущий уровень ведения сообщений.
-
--log-context -
Включить вывод контекста в сообщениях команды
message().Этот параметр включает отображение контекста только для текущего запуска CMake. Чтобы отображение контекста сохранялось для всех последующих запусков CMake, установите
CMAKE_MESSAGE_CONTEXT_SHOWкак переменную кэша. При указании этого параметра командной строки,CMAKE_MESSAGE_CONTEXT_SHOWигнорируется.
-
--debug-trycompile -
Не удалять файлы и каталоги, созданные для вызовов
try_compile()/try_run(). Это полезно при отладке неудачных проверок.Обратите внимание, что некоторые использования
try_compile()могут использовать ту же сборку, что ограничит полезность этого параметра, если проект выполняет более одногоtry_compile(). Например, такие использования могут изменить результаты, так как артефакты из предыдущей попытки компиляции могут привести к тому, что другой тест пройдёт или не пройдёт неправильно. Этот параметр лучше использовать только при отладке.(В отношении вышесказанного, команда
try_run()фактически являетсяtry_compile(). Любая комбинация этих двух команд подвержена потенциальным проблемам, описанным выше.)Введено в версии 3.25: Когда этот параметр включен, каждая проверка try-compile выводит сообщение в журнал, в котором указан каталог, в котором выполняется проверка.
-
--debug-output -
Включить режим отладки CMake.
Печать дополнительной информации во время выполнения CMake, например, трассировки стека с вызовами
message(SEND_ERROR).
-
--debug-find -
Включить режим отладки для команд поиска CMake.
Печать дополнительной информации о вызовах поиска во время выполнения CMake в стандартный поток ошибок. Вывод предназначен для просмотра человеком, а не для парсинга. См. также переменную
CMAKE_FIND_DEBUG_MODEдля отладки более локальной части проекта.
-
--debug-find-pkg=<pkg>[,...] -
Включить режим отладки для команд поиска CMake при вызовах
find_package(<pkg>), где<pkg>— имя пакета в заданном списке имён пакетов, разделённых запятыми, чувствительных к регистру.Аналогично
--debug-find, но ограничение по области действия распространяется только на указанные пакеты.
-
--debug-find-var=<var>[,...] -
Включить режим отладки для команд поиска CMake, когда вызов происходит с
<var>в качестве переменной результата, где<var>— элемент в данном списке разделённых запятой имён переменных.Аналогично
--debug-find, но ограничение по области действия распространяется только на указанные имена переменных.
-
--trace -
Включить режим трассировки CMake.
Печать трассировки всех сделанных вызовов и откуда.
-
--trace-expand -
Включить режим трассировки CMake.
Аналогично
--trace, но с раскрытыми переменными.
-
--trace-format=<format> -
Включить режим трассировки CMake и установить формат вывода трассировки.
<format>может иметь следующие значения.-
human -
Выводит каждую строку трассировки в удобочитаемом формате. Это формат по умолчанию.
-
json-v1 -
Выводит каждую строку как отдельный документ JSON. Каждый документ отделён новой строкой (
\n). Гарантируется, что внутри документа JSON новых строк не будет.Формат JSON трассировки{ "file": "/full/path/to/the/CMake/file.txt", "line": 0, "cmd": "add_executable", "args": ["foo", "bar"], "time": 1579512535.9687231, "frame": 2, "global_frame": 4 }Члены:
-
file -
Полный путь к исходному файлу CMake, где была вызвана функция.
-
line -
Строка в
file, где начинается вызов функции. -
line_end -
Если вызов функции охватывает несколько строк, это поле будет установлено на строку, где заканчивается вызов функции. Если вызов функции занимает одну строку, это поле будет отсутствовать. Это поле было добавлено в мажорную версию 2 формата
json-v1. -
defer -
Необязательный член, присутствующий, когда вызов функции был отложен командой
cmake_language(DEFER). Если присутствует, его значение — строка, содержащая отложенный вызов<id>. -
cmd -
Имя функции, которая была вызвана.
-
args -
Список строк всех параметров функции.
-
time -
Отметка времени (секунды с эпохи) вызова функции.
-
frame -
Глубина стека фрейма функции, которая была вызвана, в контексте обрабатываемого в данный момент
CMakeLists.txt. -
global_frame -
Глубина стека фрейма функции, которая была вызвана, отслеживаемая глобально по всем
CMakeLists.txtфайлам, участвующим в трассировке. Это поле было добавлено в мажорную версию 2 форматаjson-v1.
Кроме того, первый выводимый JSON-документ содержит
versionключ для текущей основной и дополнительной версииФормат версии JSON{ "version": { "major": 1, "minor": 2 } }Члены:
-
version -
Указывает версию формата JSON. Версия имеет основные и дополнительные компоненты, следуя соглашениям семантической версии.
-
-
-
--trace-source=<file> -
Включить режим трассировки CMake, но выводить только строки указанного файла.
Разрешены несколько параметров.
-
--trace-redirect=<file> -
Включить режим трассировки CMake и перенаправить вывод трассировки в файл вместо stderr.
-
--warn-uninitialized -
Выводить предупреждения об неопределённых значениях.
Выводить предупреждение, когда используется неопределённая переменная.
-
--warn-unused-vars -
Ничего не делает. В версиях CMake 3.2 и ниже этот параметр включал предупреждения об неиспользуемых переменных. В версиях CMake 3.3 по 3.18 этот параметр был нерабочим. В CMake 3.19 и выше этот параметр был удалён.
-
--no-warn-unused-cli -
Не выводить предупреждения о параметрах командной строки.
Не искать переменные, объявленные в командной строке, но не используемые.
-
--check-system-vars -
Поиск проблем с использованием переменных в системных файлах.
Обычно, неиспользуемые и неинициализированные переменные ищутся только в
CMAKE_SOURCE_DIRиCMAKE_BINARY_DIR. Этот флаг сообщает CMake о том, что необходимо предупреждать также об ошибках в других файлах.
-
--compile-no-warning-as-error -
Игнорировать свойство целевой программы
COMPILE_WARNING_AS_ERRORи переменнуюCMAKE_COMPILE_WARNING_AS_ERROR, предотвращая приведение предупреждений к ошибкам при компиляции.
-
--profiling-output=<path> -
Используется в сочетании с
--profiling-formatдля вывода в заданный путь.
-
--profiling-format=<file> -
Включить вывод профилирующей информации о скрипте CMake в заданном формате.
Это может помочь в анализе производительности исполняемых скриптов CMake. Для обработки вывода в читаемый человеком формат необходимо использовать сторонние приложения.
В настоящее время поддерживаются следующие значения:
google-traceВывод в формате Google Trace, который можно проанализировать с помощью вкладки «Прослеживание» в Google Chrome или с помощью плагина для инструментов, таких как Trace Compass.
-
--preset <preset>, --preset=<preset> -
Читает
presetиз<path-to-source>/CMakePresets.jsonи<path-to-source>/CMakeUserPresets.json. Пресет может указывать генератор и директорию сборки, а также список переменных и других аргументов для передачи в CMake. Файлы пресетов CMake должны находиться в текущей рабочей директории.CMake GUIтакже может распознавать файлыCMakePresets.jsonиCMakeUserPresets.json. Полные сведения о этих файлах см. вcmake-presets(7).Пресеты считываются до всех остальных параметров командной строки. Параметры, указанные в пресете (переменные, генератор и т. д.), можно переопределить, указав их вручную в командной строке. Например, если пресет задаёт переменную
MYVARсо значением1, но пользователь устанавливает её значение в2с аргументом-D, то предпочтение отдаётся значению2.
-
--list-presets[=<type>] -
Выводит список доступных пресетов для указанного
<type>. Допустимые значения для<type>—configure,build,test,package, илиall. Если<type>опущено, предполагаетсяconfigure. Файлы пресетов CMake должны находиться в текущей рабочей директории.
Сборка проекта
CMake предоставляет команду для сборки уже сгенерированного проекта:
cmake --build <dir> [<options>] [-- <build-tool-options>] cmake --build --preset <preset> [<options>] [-- <build-tool-options>]
Это абстрагирует интерфейс командной строки утилиты сборки с помощью следующих параметров:
-
--build <dir> -
Директория двоичных файлов проекта, подлежащая сборке. Требуется (если не указан пресет) и должна быть первой.
-
--preset <preset>, --preset=<preset> -
Использовать пресет сборки для задания параметров сборки. Директория двоичных файлов проекта определяется из ключа
configurePreset. Файлы пресетов CMake должны находиться в текущей рабочей директории. Более подробную информацию см. вpreset.
-
--list-presets -
Отображает список доступных пресетов сборки. Файлы пресетов CMake должны находиться в текущей рабочей директории.
-
-j [<jobs>], --parallel [<jobs>] -
Добавлена в версии 3.12.
Максимальное количество одновременных процессов для использования при сборке. Если
<jobs>опущено, используется значение по умолчанию для утилиты сборки.Переменная среды
CMAKE_BUILD_PARALLEL_LEVEL, если она установлена, определяет уровень параллельности по умолчанию, когда этот параметр не задан.Некоторые утилиты сборки всегда работают параллельно. Можно использовать значение
<jobs>как1, чтобы ограничить сборку одним процессом.
-
-t <tgt>..., --target <tgt>... -
Собрать
<tgt>вместо целевой программы по умолчанию. Можно указать несколько целевых программ, разделив их пробелами.
-
--config <cfg> -
Для инструментов с несколькими конфигурациями выберите конфигурацию
<cfg>.
-
--clean-first -
Сначала очистить цель
clean, а затем собрать. (Чтобы очистить только, используйте--target clean.)
-
--resolve-package-references=<value> -
Добавлена в версии 3.23.
Решить ссылки на удалённые пакеты из внешних менеджеров пакетов (например, NuGet) перед сборкой. Когда
<value>установлено в значениеon(по умолчанию), пакеты будут восстановлены перед сборкой целевой программы. Когда<value>установлено в значениеonly, пакеты будут восстановлены, но сборка не будет выполнена. Когда<value>установлено в значениеoff, пакеты не будут восстановлены.Если целевая программа не определяет ссылки на пакеты, этот параметр ничего не делает.
Это значение можно указать в пресете сборки (используя
resolvePackageReferences). Параметр пресета будет проигнорирован, если задан параметр командной строки.Если не указан параметр командной строки или параметр пресета, будет оценено значение переменной кэша, специфичной для среды, чтобы определить, следует ли выполнять восстановление пакетов.
При использовании генератора Visual Studio ссылки на пакеты определяются с помощью свойства
VS_PACKAGE_REFERENCES. Пакеты восстанавливаются с помощью NuGet. Можно отключить это, установив переменнуюCMAKE_VS_NUGET_PACKAGE_RESTOREвOFF.
-
--use-stderr -
Проигнорировано. Поведение по умолчанию в CMake >= 3.0.
-
-v, --verbose -
Включить подробный вывод (если поддерживается), включая команды сборки, которые будут выполнены.
Этот параметр можно опустить, если переменная среды
VERBOSEили кэшированная переменнаяCMAKE_VERBOSE_MAKEFILEустановлена.
-
-- -
Передать оставшиеся параметры в утилиту сборки.
Запустите cmake --build без параметров для получения краткой справки.
Установка проекта
CMake предоставляет команду для установки уже сгенерированного проекта:
cmake --install <dir> [<options>]
Это можно использовать после сборки проекта для выполнения установки без использования сгенерированной системы сборки или утилиты сборки. Параметры:
-
--install <dir> -
Директория двоичных файлов проекта для установки. Требуется и должна быть первой.
-
--config <cfg> -
Для генераторов с несколькими конфигурациями выберите конфигурацию
<cfg>.
-
--component <comp> -
Установка по компонентам. Установить только компонент
<comp>.
-
--default-directory-permissions <permissions> -
Права доступа по умолчанию для директорий установки. Права в формате
<u=rwx,g=rx,o=rx>.
-
--prefix <prefix> -
Переопределить префикс установки,
CMAKE_INSTALL_PREFIX.
-
--strip -
Сжать перед установкой.
-
-v, --verbose -
Включить подробный вывод.
Этот параметр можно опустить, если переменная среды
VERBOSEзадана.
Запустите cmake --install без параметров для получения краткой справки.
Открыть проект
cmake --open <dir>
Откройте сгенерированный проект в соответствующем приложении. Эта функция поддерживается только некоторыми генераторами.
Запуск скрипта
cmake [-D <var>=<value>]... -P <cmake-script-file> [-- <unparsed-options>...]
-
-D <var>=<value> -
Определить переменную для режима скрипта.
-
-P <cmake-script-file> -
Обработать данный файл CMake как скрипт, написанный на языке CMake. Шаг конфигурации или генерации не выполняется, и кэш не изменяется. Если переменные определены с помощью
-D, это необходимо сделать перед аргументом-P.
Любые параметры после -- не анализируются CMake, но всё же включаются в набор переменных CMAKE_ARGV<n>, передаваемых в скрипт (включая сам --).
Запуск утилиты командной строки
CMake предоставляет встроенные утилиты командной строки через синтаксис
cmake -E <command> [<options>]
-
-E [help] -
Запустить
cmake -Eилиcmake -E helpдля получения сводки команд.
Доступные команды:
-
capabilities -
Новая в версии 3.7.
Отчёт о возможностях CMake в формате JSON. Вывод — JSON-объект со следующими ключами:
-
version -
JSON-объект с информацией о версии. Ключи:
-
string -
Полная строка версии, отображаемая cmake
--version. -
major -
Номер основной версии в целочисленной форме.
-
minor -
Номер дополнительной версии в целочисленной форме.
-
patch -
Уровень исправлений в целочисленной форме.
-
suffix -
Строка суффикса версии cmake.
-
isDirty -
Булево значение, устанавливаемое, если сборка cmake выполняется из повреждённого дерева.
-
-
generators -
Список доступных генераторов. Каждый генератор — JSON-объект со следующими ключами:
-
name -
Строка, содержащая имя генератора.
-
toolsetSupport -
trueесли генератор поддерживает наборы инструментов, иfalseв противном случае. -
platformSupport -
trueесли генератор поддерживает платформы, иfalseв противном случае. -
supportedPlatforms -
Новая в версии 3.21.
Необязательный член, который может присутствовать, когда генератор поддерживает указание платформы через
CMAKE_GENERATOR_PLATFORM(-A ...). Значение — список известных поддерживаемых платформ. -
extraGenerators -
Список строк со всеми дополнительными генераторами, совместимыми с данным генератором.
-
-
fileApi -
Необязательный член, присутствующий, когда доступен
cmake-file-api(7). Значение — JSON-объект с одним членом:-
requests -
JSON-массив, содержащий ноль или более поддерживаемых запросов file-api. Каждый запрос — JSON-объект с членами:
-
kind -
Указывает один из поддерживаемых типов объектов.
-
version -
JSON-массив, элементы которого — JSON-объекты, содержащие члены
majorиminor, определяющие целые неотрицательные компоненты версии.
-
-
-
serverMode -
trueесли cmake поддерживает режим сервера, иfalseв противном случае. Всегда ложь с CMake 3.20. -
tls -
Новая в версии 3.25.
trueесли поддержка TLS включена, иfalseв противном случае.
-
-
cat [--] <files>... -
Новая в версии 3.18.
Объединить файлы и вывести на стандартный вывод.
-
-- -
Новая в версии 3.24.
Добавлена поддержка аргумента с двойным дефисом
--. Эта базовая реализацияcatне поддерживает никаких опций, поэтому использование опции, начинающейся с-, приведёт к ошибке. Используйте--для обозначения конца опций, если файл начинается с-.
-
-
chdir <dir> <cmd> [<arg>...] -
Изменить текущую рабочую директорию и выполнить команду.
-
compare_files [--ignore-eol] <file1> <file2> -
Проверить, совпадает ли
<file1>с<file2>. Если файлы совпадают, то возвращает0, если нет —1. В случае неверных аргументов возвращает 2.-
--ignore-eol -
Новая в версии 3.14.
Параметр подразумевает сравнение по строкам и игнорирует различия LF/CRLF.
-
-
copy <file>... <destination>, copy -t <destination> <file>... -
Копировать файлы в
<destination>(файл или директория). Если указано несколько файлов или-t,<destination>должно быть директорией, и оно должно существовать. Если-tне указано, последний аргумент предполагается как<destination>. Поддержка шаблонов не предусмотрена.copyследует за символическими ссылками. Это означает, что он не копирует символические ссылки, но файлы или директории, на которые они указывают.Новая в версии 3.5: Поддержка нескольких входных файлов.
Новая в версии 3.26: Поддержка аргумента
-t.
-
copy_directory <dir>... <destination> -
Копировать содержимое директорий
<dir>...в директорию<destination>. Если директория<destination>не существует, она будет создана.copy_directoryследует за символическими ссылками.Новая в версии 3.5: Поддержка нескольких входных директорий.
Новая в версии 3.15: Команда теперь завершается ошибкой, если исходная директория не существует. Ранее она завершалась успешно, создавая пустую целевую директорию.
-
copy_directory_if_different <dir>... <destination> -
Новая в версии 3.26.
Копировать изменённое содержимое директорий
<dir>...в директорию<destination>. Если директория<destination>не существует, она будет создана.copy_directory_if_differentследует за символическими ссылками. Команда завершается ошибкой, если исходная директория не существует.
-
copy_if_different <file>... <destination> -
Копировать файлы в
<destination>(файл или директория), если они изменены. Если указано несколько файлов,<destination>должно быть директорией и существовать.copy_if_differentследует за символическими ссылками.Новая в версии 3.5: Поддержка нескольких входных файлов.
-
create_symlink <old> <new> -
Создать символическую ссылку
<new>с именем<old>.Новая в версии 3.13: Поддержка создания символических ссылок в Windows.
Примечание
Путь к
<new>символической ссылке должен существовать.
-
create_hardlink <old> <new> -
Новая в версии 3.19.
Создать жёсткую ссылку
<new>с именем<old>.Примечание
Путь к
<new>жёсткой ссылке должен существовать.<old>должна существовать.
-
echo [<string>...] -
Отображает аргументы как текст.
-
echo_append [<string>...] -
Отображает аргументы как текст, но без новой строки.
-
env [<options>] [--] <command> [<arg>...] -
Новая в версии 3.1.
Запустить команду в изменённой среде. Параметры:
-
NAME=VALUE -
Заменяет текущее значение
NAMEнаVALUE.
-
--unset=NAME -
Сбрасывает текущее значение
NAME.
-
--modify ENVIRONMENT_MODIFICATION -
Новая в версии 3.25.
Применить одну операцию
ENVIRONMENT_MODIFICATIONк изменённой среде.Параметры
NAME=VALUEи--unset=NAMEэквивалентны--modify NAME=set:VALUEи--modify NAME=unset:, соответственно. Обратите внимание, что--modify NAME=reset:сбрасываетNAMEдо значения, которое было при запуске cmake (или сбрасывает его), а не к последнему значению параметраNAME=VALUE.
-
-- -
Новая в версии 3.24.
Добавлена поддержка аргумента с двумя дефисами
--. Используйте--для остановки интерпретации параметров/переменных среды и обработки следующего аргумента как команды, даже если он начинается с-или содержит=.
-
-
environment -
Отобразить текущие переменные среды.
-
false -
Новая в версии 3.16.
Ничего не делать, с кодом выхода 1.
-
make_directory <dir>... -
Создать каталоги
<dir>. При необходимости создать и родительские каталоги. Если каталог уже существует, он будет проигнорирован.Новая в версии 3.5: Поддержка нескольких входных каталогов.
-
md5sum <file>... -
Создать контрольную сумму MD5 файлов в формате, совместимом с
md5sum:351abe79cd3800b38cdfb25d45015a15 file1.txt 052f86c15bbde68af55c7f7b340ab639 file2.txt
-
sha1sum <file>... -
Новая в версии 3.10.
Создать контрольную сумму SHA1 файлов в формате, совместимом с
sha1sum:4bb7932a29e6f73c97bb9272f2bdc393122f86e0 file1.txt 1df4c8f318665f9a5f2ed38f55adadb7ef9f559c file2.txt
-
sha224sum <file>... -
Новая в версии 3.10.
Создать контрольную сумму SHA224 файлов в формате, совместимом с
sha224sum:b9b9346bc8437bbda630b0b7ddfc5ea9ca157546dbbf4c613192f930 file1.txt 6dfbe55f4d2edc5fe5c9197bca51ceaaf824e48eba0cc453088aee24 file2.txt
-
sha256sum <file>... -
Новая в версии 3.10.
Создать контрольную сумму SHA256 файлов в формате, совместимом с
sha256sum:76713b23615d31680afeb0e9efe94d47d3d4229191198bb46d7485f9cb191acc file1.txt 15b682ead6c12dedb1baf91231e1e89cfc7974b3787c1e2e01b986bffadae0ea file2.txt
-
sha384sum <file>... -
Новая в версии 3.10.
Создать контрольную сумму SHA384 файлов в формате, совместимом с
sha384sum:acc049fedc091a22f5f2ce39a43b9057fd93c910e9afd76a6411a28a8f2b8a12c73d7129e292f94fc0329c309df49434 file1.txt 668ddeb108710d271ee21c0f3acbd6a7517e2b78f9181c6a2ff3b8943af92b0195dcb7cce48aa3e17893173c0a39e23d file2.txt
-
sha512sum <file>... -
Новая в версии 3.10.
Создать контрольную сумму SHA512 файлов в формате, совместимом с
sha512sum:2a78d7a6c5328cfb1467c63beac8ff21794213901eaadafd48e7800289afbc08e5fb3e86aa31116c945ee3d7bf2a6194489ec6101051083d1108defc8e1dba89 file1.txt 7a0b54896fe5e70cca6dd643ad6f672614b189bf26f8153061c4d219474b05dad08c4e729af9f4b009f1a1a280cb625454bf587c690f4617c27e3aebdf3b7a2d file2.txt
-
remove [-f] <file>... -
Устарело начиная с версии 3.17.
Удалить файл(ы). Планировалось, что если какой-либо из перечисленных файлов не существует, команда возвращает ненулевой код выхода, но сообщение не регистрируется. Параметр
-fменяет поведение на возвращение нулевого кода выхода (т.е. успеха) в таких ситуациях вместо этого.removeне следует за символическими ссылками. Это означает, что он удаляет только символические ссылки, а не файлы, на которые они ссылаются.Реализация была некорректной и всегда возвращала 0. Это нельзя исправить без нарушения обратной совместимости. Используйте
rmвместо этого.
-
remove_directory <dir>... -
Устарело начиная с версии 3.17.
Удалить каталоги
<dir>и их содержимое. Если каталог не существует, он будет проигнорирован. Используйтеrmвместо этого.Новая в версии 3.15: Поддержка нескольких каталогов.
Новая в версии 3.16: Если
<dir>является символической ссылкой на каталог, удаляется только символическая ссылка.
-
rename <oldname> <newname> -
Переименовать файл или каталог (в пределах одного тома). Если файл с именем
<newname>уже существует, он будет молча заменён.
-
rm [-rRf] [--] <file|dir>... -
Новая в версии 3.17.
Удалить файлы
<file>или каталоги<dir>. Используйте-rили-Rдля рекурсивного удаления каталогов и их содержимого. Если какой-либо из перечисленных файлов/каталогов не существует, команда возвращает ненулевой код выхода, но сообщение не регистрируется. Параметр-fменяет поведение на возвращение нулевого кода выхода (т.е. успеха) в таких ситуациях вместо этого. Используйте--для остановки интерпретации параметров и обработки всех оставшихся аргументов как путей, даже если они начинаются с-.
-
sleep <number>... -
Новая в версии 3.0.
Подождать заданное количество секунд.
-
tar [cxt][vf][zjJ] file.tar [<options>] [--] [<pathname>...] -
Создать или извлечь архив tar или zip. Доступны следующие варианты:
-
c -
Создать новый архив, содержащий указанные файлы. Если используется, аргумент
<pathname>...обязателен.
-
x -
Извлечь из архива на диск.
Добавлен в версии 3.15: Аргумент
<pathname>...может использоваться для извлечения только выбранных файлов или каталогов. При извлечении выбранных файлов или каталогов необходимо указать их точные имена, включая путь, как показано в списке (-t).
-
t -
Показать содержимое архива.
Добавлен в версии 3.15: Аргумент
<pathname>...может использоваться для показа только выбранных файлов или каталогов.
-
v -
Выводить подробную информацию.
-
z -
Сжать полученный архив с помощью gzip.
-
j -
Сжать полученный архив с помощью bzip2.
-
J -
Добавлен в версии 3.1.
Сжать полученный архив с помощью XZ.
-
--zstd -
Добавлен в версии 3.15.
Сжать полученный архив с помощью Zstandard.
-
--files-from=<file> -
Добавлен в версии 3.1.
Считывать имена файлов из указанного файла, по одному в строке. Пустые строки игнорируются. Строки не должны начинаться с
-за исключением--add-file=<name>, чтобы добавить файлы, имена которых начинаются с-.
-
--format=<format> -
Добавлен в версии 3.3.
Указать формат создаваемого архива. Поддерживаемые форматы:
7zip,gnutar,pax,paxr(ограниченный pax, по умолчанию) иzip.
-
--mtime=<date> -
Добавлен в версии 3.1.
Указать время изменения, которое будет записано в записи архива tar.
-
--touch -
Добавлен в версии 3.24.
Использовать текущую локальную метку времени вместо извлечения отметок времени файлов из архива.
-
-- -
Добавлен в версии 3.1.
Прекратить интерпретацию параметров и считать все оставшиеся аргументы именами файлов, даже если они начинаются с
-.
Добавлен в версии 3.1: Поддержка LZMA (7zip).
Добавлен в версии 3.15: Команда теперь продолжает добавлять файлы в архив, даже если некоторые из них недоступны для чтения. Это поведение более соответствует классическому инструменту
tar. Команда теперь также анализирует все флаги, и если был предоставлен недопустимый флаг, выдается предупреждение. -
-
time <command> [<args>...] -
Выполнить команду и отобразить затраченное время.
Добавлен в версии 3.5: Команда теперь корректно передает аргументы с пробелами или специальными символами дочернему процессу. Это может нарушить работу скриптов, которые обходили ошибку с помощью собственной дополнительной цитирования или экранирования.
-
touch <file>... -
Создает
<file>, если файла не существует. Если<file>существует, он изменяет<file>время доступа и изменения.
-
touch_nocreate <file>... -
Изменить время файла, если он существует, но не создавать его. Если файл не существует, он будет проигнорирован.
-
true -
Добавлен в версии 3.16.
Не делать ничего, с кодом завершения 0.
Инструменты командной строки, специфичные для Windows
Следующие команды cmake -E доступны только в Windows:
-
delete_regv <key> -
Удалить значение реестра Windows.
-
env_vs8_wince <sdkname> -
Добавлен в версии 3.2.
Отображает пакетный файл, который устанавливает среду для установленного Windows CE SDK в VS2005.
-
env_vs9_wince <sdkname> -
Добавлен в версии 3.2.
Отображает пакетный файл, который устанавливает среду для установленного Windows CE SDK в VS2008.
-
write_regv <key> <value> -
Записать значение реестра Windows.
Запуск инструмента поиска пакетов
CMake предоставляет помощник pkg-config для проектов на основе Makefile:
cmake --find-package [<options>]
Он ищет пакет с помощью find_package() и выводит полученные флаги в стандартный вывод. Это можно использовать вместо pkg-config для поиска установленных библиотек в простых проектах на основе Makefile или в проектах на основе autoconf (через share/aclocal/cmake.m4).
Примечание
Этот режим не полностью поддерживается из-за некоторых технических ограничений. Он сохраняется для совместимости, но не должен использоваться в новых проектах.
Запуск набора действий (Workflow)
CMake Presets предоставляет способ выполнения нескольких этапов сборки в определенном порядке:
cmake --workflow [<options>]
Доступные варианты:
-
--workflow -
Выбрать Набор действий с использованием одного из следующих вариантов.
-
--preset <preset>, --preset=<preset> -
Использовать набор действий для указания набора действий. Директория двоичных файлов проекта определяется по исходному набору настроек. Текущая рабочая директория должна содержать файлы наборов настроек CMake. Для получения более подробной информации см.
preset.
-
--list-presets -
Отображает доступные наборы действий. Текущая рабочая директория должна содержать файлы наборов настроек CMake.
-
--fresh -
Выполнить новую настройку дерева сборки. Это удаляет любой существующий файл
CMakeCache.txtи связанную директориюCMakeFiles/и создаёт их заново.
Просмотр справки
Чтобы распечатать выбранные страницы документации CMake, используйте
cmake --help[-<topic>]
с одним из следующих параметров:
-
-version [<file>], --version [<file>], /V [<file>] -
Отобразить заголовок имени/версии программы и завершить работу. Вывод печатается в указанный файл
<file>, если он задан.
-
-h, -H, --help, -help, -usage, /? -
Вывести информацию об использовании и завершить работу.
Описание использования описывает основные возможности командной строки и её параметры.
-
--help-full [<file>] -
Вывести все руководства справки и завершить работу.
Все руководства выводятся в читаемом текстовом формате. Вывод печатается в указанный файл
<file>, если он задан.
-
--help-manual <man> [<file>] -
Вывести одно руководство справки и завершить работу.
Указанное руководство выводится в читаемом текстовом формате. Вывод печатается в указанный файл
<file>, если он задан.
-
--help-manual-list [<file>] -
Отобразить список доступных руководств справки и завершить работу.
Список содержит все руководства, для которых справка может быть получена с помощью параметра
--help-manual, за которым следует имя руководства. Вывод печатается в указанный файл<file>, если он задан.
-
--help-command <cmd> [<file>] -
Вывести справку по одной команде и завершить работу.
Вводная страница руководства
cmake-commands(7)для<cmd>выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-command-list [<file>] -
Отобразить список команд с доступной справкой и завершить работу.
Список содержит все команды, для которых справка может быть получена с помощью опции
--help-commandи имени команды. Вывод печатается в указанный<file>файл, если он задан.
-
--help-commands [<file>] -
Вывести руководство cmake-commands и завершить работу.
Руководство
cmake-commands(7)выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-module <mod> [<file>] -
Вывести справку по одному модулю и завершить работу.
Вводная страница руководства
cmake-modules(7)для<mod>выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-module-list [<file>] -
Отобразить список модулей с доступной справкой и завершить работу.
Список содержит все модули, для которых справка может быть получена с помощью опции
--help-moduleи имени модуля. Вывод печатается в указанный<file>файл, если он задан.
-
--help-modules [<file>] -
Вывести руководство cmake-modules и завершить работу.
Руководство
cmake-modules(7)выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-policy <cmp> [<file>] -
Вывести справку по одному политике и завершить работу.
Вводная страница руководства
cmake-policies(7)для<cmp>выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-policy-list [<file>] -
Отобразить список политик с доступной справкой и завершить работу.
Список содержит все политики, для которых справка может быть получена с помощью опции
--help-policyи имени политики. Вывод печатается в указанный<file>файл, если он задан.
-
--help-policies [<file>] -
Вывести руководство cmake-policies и завершить работу.
Руководство
cmake-policies(7)выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-property <prop> [<file>] -
Вывести справку по одному свойству и завершить работу.
Вводные страницы руководства
cmake-properties(7)для<prop>выводятся в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-property-list [<file>] -
Отобразить список свойств с доступной справкой и завершить работу.
Список содержит все свойства, для которых справка может быть получена с помощью опции
--help-propertyи имени свойства. Вывод печатается в указанный<file>файл, если он задан.
-
--help-properties [<file>] -
Вывести руководство cmake-properties и завершить работу.
Руководство
cmake-properties(7)выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-variable <var> [<file>] -
Вывести справку по одной переменной и завершить работу.
Вводная страница руководства
cmake-variables(7)для<var>выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
-
--help-variable-list [<file>] -
Отобразить список переменных с доступной справкой и завершить работу.
Список содержит все переменные, для которых справка может быть получена с помощью опции
--help-variableи имени переменной. Вывод печатается в указанный<file>файл, если он задан.
-
--help-variables [<file>] -
Вывести руководство cmake-variables и завершить работу.
Руководство
cmake-variables(7)выводится в удобочитаемом текстовом формате. Вывод печатается в указанный<file>файл, если он задан.
Для просмотра доступных настроек проекта используйте
cmake <source-dir> --list-presets
Значение возврата (код завершения)
При нормальном завершении выполнение исполняемого файла cmake возвращает код завершения 0.
Если завершение вызвано командой message(FATAL_ERROR) или другой ошибкой, то возвращается ненулевой код завершения.
См. также
Для получения справки по использованию CMake доступны следующие ресурсы:
- Главная страница
-
Основная стартовая точка для ознакомления с CMake.
- Онлайн-документация и ресурсы сообщества
-
https://cmake.org/documentation
На этой веб-странице находятся ссылки на доступную документацию и ресурсы сообщества.
- Форум Discourse
-
Форум Discourse предоставляет площадку для обсуждения и вопросов о CMake.
© 2000–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/manual/cmake.1.html