CMake - как заблокировать выполнение скриптов установки во время упаковки? - PullRequest
0 голосов
/ 14 сентября 2018

Мой CMakeLists.txt файл содержит команды, которые должны быть выполнены make install, и все это прекрасно работает. Пример CMakeLists.txt ниже - это небольшая выдержка из моего реального файла CMake (содержание tm0001.cpp здесь не важно - это может быть любая программа на C ++):

cmake_minimum_required(VERSION 3.12)

project(tm0001)

set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} tm0001.cpp)

install(
  TARGETS ${PROJECT_NAME}
  DESTINATION /usr/local/bin
  PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

install(CODE "message(\"-- This must be called during installation only\")")

set(CPACK_PACKAGE_CONTACT "HEKTO")
set(CPACK_GENERATOR "DEB")
include(CPack)

Я вижу, что команда message также выполняется make package, что не Я хочу.

Как заставить CMake не выполнять сценарии установки командой make package? Я не мог найти способ сделать это с помощью команды CMake if.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Я отвечаю на свой вопрос, потому что существующий ответ не решает мою главную проблему.Я не смог найти никакого способа (на уровне CMake) блокировать выполнение команд install во время make package - даже команда postinst вызывает эту команду.

К счастью, я мог изменитьpostinst сам скрипт ничего не делает в случае, если он называется не dpkg:

if [ -z ${DPKG_ADMINDIR} ]; then
  echo "postinst: missing 'dpkg' environment (not an error during packaging)"
  exit 0
fi

Это трюк, но у меня это сработало.

0 голосов
/ 17 сентября 2018

Как уже говорилось в комментарии, крайне плохая идея "работать с / systemd" (и делать все, что не связано со сборкой или упаковкой вашего проекта) из команд install.Команда install (даже SCRIPT и CODE подписи) предназначена для использования при установочных действиях , а не для каких-либо других побочных эффектов .

Правильный способ действовать здесь - это создать собственный пакет (DEB / RPM) со скриптом post-install, в котором с помощью системных макросов (как описано здесь ) вы можете правильно установить свой пакет.Посмотрите на CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA способ предоставления действий по установке пакета.

Другая плохая вещь - это использовать жестко закодированный путь (/usr/bin/).И кстати, лучшее место для (чистого) приложения-демона, которое я предлагаю /usr/sbin/.Посмотрите на GNUInstallDirs модуль, поставляемый с CMake для дальнейших ссылок.

...