我正在配置 CMake/CPack 以安装一个附带一些只读共享数据文件的应用程序。我的理解是,根据FHS,此类文件应存储在/usr/share
理想情况下应存储在特定于应用程序的目录(例如 /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)
. 这似乎是一种浪费。 - 否则,如果我误解了这种类型的数据应该安装在哪里,它应该放在哪里,并且是
TYPE DATA
正确的使用方式install(DIRECTORY ...)
?还是我还需要使用明确指定的DESTINATION
?
我想这是询问是否适合用途并与 FHS 兼容GNUInstallDirs
的好方法。TYPE DATA
我的主要目标是让 CMake/CPack将东西放在它们应该存在的地方,而无需为每个平台的安装程序明确指定正确的位置。