应使用CMake安装命令在何处安装可执行资源文件?

时间:2018-03-16 21:09:35

标签: c++ cmake resources

我现在开始了解CMake,但有一个问题基本上让我难过。假设我有一个项目结构,如下所示:

.
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    ├── main.cpp
    └── resources
        └── text_file.txt

在此示例中,main.cpp依赖于resources/text_file.txt,包括使用std::ifstream fileReader{ "text_file.txt" }。因此,在我的顶级CMakeLists.txt文件中,我有以下行:

file(COPY src/resources DESTINATION ${PROJECT_BINARY_DIR}/src)

此命令适用于构建目录,我的所有资源(文本文件,图像和所有类似内容都可供我构建的应用程序访问)。但是,使用install命令和make install进行安装时, 不能正常工作。例如,如果我想安装可执行文件,我可以使用:

install(TARGETS test_executable DESTINATION bin)

其中test_executable是可执行文件的名称。另一方面,安装此资源文件夹似乎有点棘手。我最初的想法是将此文件夹“安装”到bin以便我的可执行文件可以访问它,但后来我认为这是一个坏主意,因为:

  1. bin文件夹用于可执行文件,而不是资源文件。
  2. (我不完全确定这个)resources是包含资源的文件夹的一个相当常见的名称,因此将它们放在bin中可能会有风险。如果最佳做法 将资源放入resources的{​​{1}}文件夹中,那么对于同时拥有bin的其他应用程序来说,这不会成为问题夹? (我意识到如果我只是重命名文件夹就不会有问题,但这不是重点)
  3. 这导致了我的问题:当我使用CMake时,我的资源文件的安装位置应该是什么,以便我构建的可执行文件可以使用上面显示的文件路径访问它们?它应该在resources,还是有其他专门用于此角色的文件夹?拥有大量资源文件的视频游戏如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,我进行了更多研究,发现this AskUbuntu answer指出相关资源文件存储在/usr/share/usr/local/share中,用于存储平台无关的文件

为了获得此路径,大多数应用程序都配置了一个脚本,该脚本根据平台将其存储在变量中。