Чтобы начать с некоторого контекста, в документации CMake есть много информации о системах сборки, так как это основная функция CMake. CMake является генератором системы сборки. Из документации , краткой информации о роли CMake в отношении систем сборки:
A buildsystem описывает, как собрать исполняемые файлы и библиотеки проекта из его источника код с использованием инструмента сборки для автоматизации процесса. Например, система сборки может быть Makefile
для использования с инструментом создания командной строки или файлом проекта для интегрированной среды разработки (IDE). Чтобы избежать поддержки нескольких таких систем сборки, проект может задавать свою систему сборки абстрактно, используя файлы, написанные на языке CMake. Из этих файлов CMake генерирует предпочтительную систему сборки локально для каждого пользователя через бэкэнд, называемый generator .
Имея это в виду, CMake пытается упростить задачу, проверяя систему сборки для нас. Таким образом, если мы обновим наши файлы CMake, нам не нужно будет перезапускать CMake и восстанавливать систему сборки. Эта «проверка системы сборки» запускает по умолчанию при вызове cmake
из командной строки. Но он также будет запускаться при сборке кода (например, с помощью make
), чтобы убедиться, что ваша система сборки обновлена.
Вы можете увидеть специальную предопределенную цель CMake, которая проверяет вашу систему сборки. Для систем сборки на основе Makefile это будет выглядеть примерно так в вашем Makefile:
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
.PHONY : cmake_check_build_system
Недокументированный параметр командной строки CMake --check-build-system
, за которым следует CMakeFiles/Makefile.cmake
, является "аргументом системы сборки", которым вы были Ищу.
Это сообщение:
Re-run cmake no build system arguments
появляется при запуске cmake
, поскольку CMake все еще внутренне выполняет проверку системы сборки. В этом случае аргумент --check-build-system
не предоставляется, поэтому CMake всегда регенерирует, как ожидается. Таким образом, это не сообщение об ошибке, а просто подробное сообщение журнала, дающее немного больше информации о том, что делает CMake.
Эта «проверка системы сборки» должна происходить со всеми системами сборки CMake. Например, Visual Studio создает цель ZERO_CHECK
с таким же поведением. Вместо этого он использует параметр командной строки --check-stamp-list
(также недокументированный), чтобы проверить актуальность вашего проекта / решения.
Еще одно примечание: вы можете отключить Автоматическая проверка системы сборки CMake c путем переключения переменной CMAKE_SUPPRESS_REGENERATION
на ON
. Просто поместите его внизу вашего файла CMake верхнего уровня:
set(CMAKE_SUPPRESS_REGENERATION ON)
Конечно, CMake всегда будет восстанавливаться, когда вы вызываете cmake
напрямую. Но когда эта переменная равна ON
, специальная цель регенерации будет удалена (cmake_check_build_system
для Make-файлов, ZERO_CHECK
для Visual Studio и др. c).