Убедительный CPack для правильной установки общих данных только для чтения в / usr / share - PullRequest
1 голос
/ 31 января 2020

Я настраиваю CMake / CPack для установки приложения, которое поставляется с несколькими общими файлами данных только для чтения. Насколько я понимаю, согласно FHS такие файлы должны храниться в /usr/share, в идеале в каталоге c, определяемом приложением ( например, /usr/share/my_project), а не напрямую под /usr/share. Я использую GNUInstallDirs как попытку остаться (в моем понимании) ожиданий FHS, используя следующее:

#...

include(GNUInstallDirs)

# BAD: Installs files from ${CMAKE_CURRENT_SOURCE_DIR}/data
# into /usr/share
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/"
  TYPE DATA
)

# GOOD: Installs files from ${CMAKE_CURRENT_SOURCE_DIR}/data
# into /usr/share/${PROJECT_NAME}
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/"
  DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}"
)

#...

Все работает так, как задокументировано; мои вопросы:

  1. Правильно ли я понимаю FHS, что (в идеале) я должен поместить данные только для чтения моих приложений в /usr/share/my_project?
  2. Если это так, я использую TYPE DATA неправильно в INSTALL(DIRECTORY ...)? То есть я должен скопировать все свои данные в ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} и затем использовать INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} TYPE DATA). Это кажется пустой тратой.
  3. В противном случае, если я неправильно понимаю, где должен быть установлен этот тип данных, где он должен go, и является ли TYPE DATA правильным способом использования install(DIRECTORY ...)? Или мне все еще нужно использовать явно указанную DESTINATION?

Я думаю, это хороший способ узнать, подходят ли GNUInstallDirs и TYPE DATA для этой цели и совместимы ли они с ФХС или нет. Моя главная цель - сделать так, чтобы CMake / CPack просто помещал вещи туда, где они должны жить , без необходимости явно указывать правильное местоположение для установщика каждой платформы.

...