我现在开始了解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
以便我的可执行文件可以访问它,但后来我认为这是一个坏主意,因为:
bin
文件夹用于可执行文件,而不是资源文件。 resources
是包含资源的文件夹的一个相当常见的名称,因此将它们放在bin
中可能会有风险。如果最佳做法 将资源放入resources
的{{1}}文件夹中,那么对于同时拥有bin
的其他应用程序来说,这不会成为问题夹? (我意识到如果我只是重命名文件夹就不会有问题,但这不是重点)这导致了我的问题:当我使用CMake时,我的资源文件的安装位置应该是什么,以便我构建的可执行文件可以使用上面显示的文件路径访问它们?它应该在resources
,还是有其他专门用于此角色的文件夹?拥有大量资源文件的视频游戏如何处理这个问题?
答案 0 :(得分:0)
好吧,我进行了更多研究,发现this AskUbuntu answer指出相关资源文件存储在/usr/share
或/usr/local/share
中,用于存储平台无关的文件
为了获得此路径,大多数应用程序都配置了一个脚本,该脚本根据平台将其存储在变量中。