Ответ 1
Построение проекта CMake можно условно разделить на три этапа:
- Настроить время. Это включает в себя все, что происходит при запуске самого
cmake
. Этот этап связан с проверкой определенных свойств хост-системы и созданием конкретных файлов сборки для этой платформы в выбранной конфигурации. - Время сборки. Это включает в себя все, что происходит при фактической сборке вашего проекта из файлов, сгенерированных CMake (например, при запуске
cmake --build
илиmake
). Здесь происходит вся фактическая компиляция и компоновка, поэтому в конце фазы сборки у вас есть пригодный для использования бинарный файл. - Время установки. Это включает в себя все, что происходит при запуске цели
INSTALL
сгенерированной CMake (например, при запускеcmake --build --target install
илиmake install
). Это заботится о копировании двоичных файлов, которые были сгенерированы в дерево сборки, в другой каталог. Обратите внимание, что дерево сборки содержит множество вещей, которые больше не нужны после завершения сборки, если вы заинтересованы только в запуске двоичного файла. Примеры включают в себя все промежуточные артефакты сборки, такие как файлы сборки, созданные на этапе настройки, или промежуточные объектные файлы, созданные на этапе сборки. Кроме того, фаза установки может включать дополнительные шаги, чтобы гарантировать, что двоичные файлы, созданные во время сборки, являются переносимыми. Например, в системах Linux вы можете захотеть удалить каталог сборки из пути поиска общей библиотеки в двоичном файле и заменить его переносимым эквивалентом. Таким образом, фаза установки может сделать больше, чем просто скопировать все важные файлы в новый каталог. Это может также включать дополнительные шаги, которые изменяют двоичные файлы, чтобы сделать их более переносимыми.
Обратите внимание, что последний этап не является обязательным. Если вы не хотите поддерживать вызов make install
но предпочитаете другой механизм развертывания, вы просто не используете команду install
в своем сценарии CMake, и цель INSTALL
не будет сгенерирована.