Какое время установки CMake?

Цитата из официальной документации:

Msgstr "Укажите правила для запуска во время установки."

Что такое время установки?

Проблема для меня: я нахожусь на Linux, программное обеспечение установлено из пакетов, которые являются просто зависимостями и данными. Там нет CMake, который может сделать что-нибудь здесь. Таким образом, время установки программного обеспечения выходит за рамки CMake. Так что именно они имеют в виду?

Ответ 1

Построение проекта CMake можно условно разделить на три этапа:

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

Обратите внимание, что последний этап не является обязательным. Если вы не хотите поддерживать вызов make install но предпочитаете другой механизм развертывания, вы просто не используете команду install в своем сценарии CMake, и цель INSTALL не будет сгенерирована.

Ответ 2

Я хотел бы немного расширить ответ, который дал вам ComicSansMS.

Как он упомянул - CMake генерирует дополнительную цель под названием install для инструмента make (когда вы используете генератор на основе Makefile).

Это может показаться странным для вас, поскольку система пакетов используется для Linux. Однако цель install все еще полезна или даже необходима:

  1. При разработке приложения вам может потребоваться установить (переместить двоичные файлы и, возможно, некоторые включаемые файлы) в определенное место, чтобы некоторые из ваших проектов могли видеть друг друга. Например, вы можете разработать библиотеку и набор не связанных приложений, которые ее используют. Тогда эта библиотека должна быть установлена где-то, чтобы быть видимой. Это не значит, что вам нужно поместить его в каталог /usr; Вы можете использовать свой /home.
  2. Процесс подготовки пакета Linux требует установки. Например, система сборки RPM выполняет три основных шага при создании файла пакета rpm: проект настраивается, затем компилируется и связывается и, наконец, устанавливается в определенное место. Все файлы из этого места упаковываются в файл rpm.