cmake: разница между "make install" и "make package" - PullRequest
0 голосов
/ 12 апреля 2019

Я использую CMake для генерации моих make-файлов.Моя развертываемая цель - RPM, и все это работает хорошо.В соответствии с рекомендациями файловой системы мой RPM устанавливается на

/opt/mytool
    /bin - executables
    /lib64 - libraries
/etc/opt/mytool - configuration files

RPM создается с помощью CPack с использованием make package

Во время тестирования разработки я не хочу устанавливать RPM.Это требует повышенных привилегий и ограничивает любую конкретную машину одной (разработчик) версией за раз.Перед тем, как я начал работать со всеми RPM-компонентами, я смог «сделать установку» и создать простое дерево install, например:

install
    /opt/mytool
        bin
        lib64

Однако введение файлов конфигурации в другое местосклеил работы.Я бы хотел, чтобы это было расширено до

install
    /etc/opt/mytool

, но я могу жить без него.К сожалению, когда я пытаюсь make install я получаю эту ошибку:

Install the project...
-- Install configuration: "Debug"
CMake Error at cmake_install.cmake:49 (file):
  file cannot create directory: /etc/opt/mytool.  Maybe need administrative
  privileges.

Обидной частью CMakeLists.txt файла является

install(FILES ${PROJECT_SOURCE_DIR}/../Config/mytool.cfg
    DESTINATION /etc/opt/mytool
)

Я смотрел на CMakerpm устанавливает файл в /etc/init.d, но мой RPM-сборка просто отлично (и я использую CMake 3)

В чем разница между make install и make package (яМожно сделать вывод, что на последнем работает CPack, и он работает просто отлично)?Как я могу создать дерево установки разработки

1 Ответ

0 голосов
/ 12 апреля 2019

Разница между двумя целями сборки в том, что package создает RPM-файл в вашем случае, тогда как install копирует ресурсы, предоставленные команде install(), в расположение, предоставленное DESTINATION параметр:

DESTINATION

Укажите каталог на диске, в который будет установлен файл.Если указан полный путь (с косой чертой или буквой диска), он используется напрямую.Если указан относительный путь, он интерпретируется относительно значения переменной CMAKE_INSTALL_PREFIX .Префикс может быть перемещен во время установки с использованием механизма DESTDIR, описанного в документации по переменной CMAKE_INSTALL_PREFIX .

Вы указали для копирования файлов в /etc/opt/mytool, для которых у вас явно нет записиразрешения и столкнуться с указанной ошибкой.

У вас есть два варианта решения этой проблемы, второй явно предпочтительнее, поскольку он позволяет каждому разработчику предоставить свои собственные системные настройки, где временно устанавливать файлы dev:

  • установить DESTINATION путь, для которого у вас есть права на запись
  • установить относительный путь и вызвать cmake с дополнительным аргументом, чтобы указать, где находится дерево установки разработки:
cmake -H<source path> -B<build path> -DCMAKE_INSTALL_PREFIX=<install path>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...