我正在尝试在我的 C++ 应用程序上打开一些 openGL 着色器。我的应用程序分为两个抽象层:图形引擎(使用 openGL)和实际应用程序逻辑。我希望图形引擎尽可能地可回收[1](用于其他项目)。
问题是,如果我相对定义着色器文件的路径(例如 #define FOO_FRAG_SHADER "shaders/foo.frag"
)程序无法找到它,因为这个目录是相对的到图形引擎的路径而不是应用程序的路径。出于上面 [1] 评论的原因,我真的不想指定它相对于应用程序目录的目录,因为它变得依赖于应用程序。
因此,我的问题是:是否可以指定相对于指定目录的文件的目录?
最佳答案
相对路径是根据进程的工作目录 解析的,这不一定是可执行文件本身的位置。例如,如果你这样启动你的程序
/user/oier/bin/> ./a.out
然后相对于 /user/oier/bin
解析相对路径。但是,如果你这样启动它
/user/oier/> bin/a.out
然后相对于 /user/oier
解析相对路径。
有两种常见的方法可以在不对文件位置进行硬编码的情况下解决此问题:
- 传递指定图形引擎基本路径的命令行参数,或者
- 使用环境变量指定图形引擎的位置
如果有问题的文件很小,并且每个应用程序都可能想要提供它的私有(private)拷贝,第三种方法是将有问题的文件复制到应用程序 bin< 下的文件夹中
,并使用基于拷贝位置的相对引用。
关于c++ - C++ 上的相关文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785740/