我有一个具有以下目录树结构的项目:
CMakeLists.txt
\src
test.cpp
\include
test.h
\resources
various resource files
test.cpp包含正确的路径(相对于root),以便指向资源目录中的资源。 在构建目录中使用源外构建运行CMake时,\ build目录将创建为根目录的子目录,但现在无法再访问test.cpp中硬编码的先前正确路径所指向的资源,因为工作目录不是根。
如何使用CMake和源外构建来管理资源?
答案 0 :(得分:2)
作为程序作者,您需要了解相对路径。使用相对路径,您必须始终清楚它相对于哪个。 “源文件目录”是一个可怕的参考点,因为它在运行时不存在。
是相对于当前(=工作)目录的路径吗?然后,这超出了CMake的控制范围,您必须正确启动程序。出于测试目的,您可以设置测试属性WORKING_DIRECTORY
。
是否是相对于可执行位置的路径?如果是这样,您可以通过其RNTIME_OUTPUT_DIRECTORY
属性定位可执行文件,和/或使用file(COPY)
或configure_file(COPYONLY)
将资源复制到正确的位置。