Я настраиваю 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}"
)
#...
Все работает так, как задокументировано; мои вопросы:
- Правильно ли я понимаю FHS, что (в идеале) я должен поместить данные только для чтения моих приложений в
/usr/share/my_project
? - Если это так, я использую
TYPE DATA
неправильно в INSTALL(DIRECTORY ...)
? То есть я должен скопировать все свои данные в ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
и затем использовать INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} TYPE DATA)
. Это кажется пустой тратой. - В противном случае, если я неправильно понимаю, где должен быть установлен этот тип данных, где он должен go, и является ли
TYPE DATA
правильным способом использования install(DIRECTORY ...)
? Или мне все еще нужно использовать явно указанную DESTINATION
?
Я думаю, это хороший способ узнать, подходят ли GNUInstallDirs
и TYPE DATA
для этой цели и совместимы ли они с ФХС или нет. Моя главная цель - сделать так, чтобы CMake / CPack просто помещал вещи туда, где они должны жить , без необходимости явно указывать правильное местоположение для установщика каждой платформы.