Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 说服CPack在/usr/share下正确安装共享只读数据_Cmake_Cpack_Fhs - Fatal编程技术网

Cmake 说服CPack在/usr/share下正确安装共享只读数据

Cmake 说服CPack在/usr/share下正确安装共享只读数据,cmake,cpack,fhs,Cmake,Cpack,Fhs,我正在配置CMake/CPack来安装一个附带一些只读共享数据文件的应用程序。我的理解是,根据,这些文件应该存储在/usr/share下,最好是存储在特定于应用程序的目录(例如/usr/share/My_project)下,而不是直接存储在/usr/share下。我使用GNUInstallDirs试图保持(我的理解)FHS的期望,使用以下内容: #... include(GNUInstallDirs) # BAD: Installs files from ${CMAKE_CURRENT_SO

我正在配置CMake/CPack来安装一个附带一些只读共享数据文件的应用程序。我的理解是,根据,这些文件应该存储在
/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_项目下
  • 如果是这种情况,我在
    安装(目录…
    中使用的
    类型数据是否错误?也就是说,我应该将所有数据复制到
    ${CMAKE\u CURRENT\u BINARY\u DIR}/${PROJECT\u NAME}
    ,然后使用
    安装(目录${CMAKE\u CURRENT\u BINARY\u DIR}/${PROJECT\u NAME}类型数据)
    。那似乎是浪费
  • 否则,如果我误解了这类数据应该安装在哪里,它应该放在哪里,并且
    类型数据
    是使用
    安装(目录…
    的正确方法吗?或者我仍然需要使用明确指定的
    目的地

  • 我想这是询问
    GNUInstallDirs
    TYPE DATA
    是否适合使用,是否与FHS兼容的好方法。我的主要目标是让CMake/CPack将东西放在它们应该居住的地方,而不需要明确指定每个平台安装程序的正确位置。

    “我是否正确理解FHS(理想情况下)我应该将应用程序的共享只读数据放在/usr/share/My_项目下?”-根据您参考的FHS文档,FHS建议使用
    /usr/share
    下的子目录,但不要求它是
    my_project
    。要使用
    类型数据
    您可以将
    CMAKE\u INSTALL\u DATAROOTDIR
    设置为子目录,或者安装目录
    ${CMAKE\u CURRENT\u SOURCE\u DIR}/my\u project
    (最后一个组件相应命名,并且不终止
    //code>)。听起来像
    set(CMAKE\u INSTALL\u DATADIR)${CMAKE\u INSTALL\u DATADIR}/${PROJECT_NAME}
    可能是最干净的解决方案;我没有想到要改变这一点。我理解终止
    /
    复制目录内容而不复制基本目录;这在这方面类似于
    rsync
    。“我对FHS的理解正确吗(理想情况下)我应该将应用程序的共享只读数据放在/usr/share/my_项目下吗?“-根据您参考的FHS文档,FHS建议使用
    /usr/share
    下的子目录,但不要求它是
    my_project
    。要使用
    类型数据
    ,您可以将
    CMAKE_INSTALL_DATAROOTDIR
    设置为子目录,或安装目录
    ${CMAKE_CURRENT_SOURCE_DIR}”/my_项目
    (最后一个组件的名称与之对应,并且没有终止
    /
    )。听起来像是
    集(CMAKE_INSTALL_DATADIR“${CMAKE_INSTALL_DATADIR}/${project_NAME})
    可能是最干净的解决方案;我没有想到要改变这一点。我理解终止
    /
    复制目录内容而不复制基本目录;在这方面类似于
    rsync