c++ - C++ 上的相关文件

标签 c++

我正在尝试在我的 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/

相关文章:

c++ - 使用或不使用指针制作数据成员对象

c++ - 在 C++ 中使用 delete 时出现段错误

c++ - 为什么 std::exception 没有 move 构造函数?

c++ - 单引号防止 bindValue 替换占位符标记

c++ - 为什么在预处理中使用负像?

c++ - Linux系统如何获取内存信息?

c++ - 为 C++ 开发设置 GTK+ 时遇到问题

c++ - 如何遍历 boost::exception 中的所有 error_info?

c++ - 将 nvcc 与 CUDA 6 和 VS 2012 Express 结合使用

c++ - QImage错误着色,格式为Indexed8