2012-09-03 44 views
1

我目前正在构建一个C++跨平台游戏。获取主程序知道资源的位置(图像,数据...)

经过一堆谷歌搜索和阅读各种开源程序的代码,我仍然无法弄清楚如何在编译时将绝对路径传递到安装目录。

的想法我是要确定对资源的“根”的路径,让我访问的子目录,例如用于保存/载入数据,图像等...

我现在有一个典型的开放-source项目组织:

  • 斌/(二进制)
  • 包括/(头文件)
  • 的src /(来源)
  • 供应商/(外部库)
  • 资源/(图像,数据等)
  • 测试/(测试程序)

但我可以怎么能实现呢? 使用预处理器传递一个宏(安装路径)也许?

这是一个很好的做法还是有更好的方法来做到这一点?

+0

我得到它的工作使用相对路径和Unix系统bash启动脚本尚未找到一个解决方案,但Windows仍然。 –

回答

1

我仍然无法弄清楚如何传递到安装目录的绝对路径在编译时

你不可能知道这一点,事前在编译时间。你不需要。使用相对路径,我没有理由不使用它们。

+0

我担心的是程序的工作目录,如果我编译的程序位于目录的根目录下,那么工作目录会是程序的目录(例如,如果我从软链接运行它)? –

1

您需要找出平台相关时尚的安装路径。没有便携式的方式。

基本上:

  • 在Windows,使用GetModuleFileNameW()
  • 在MacOS;使用[[NSBundle mainBundle] bundlePath](IIRC,CFBundle变得复杂得多。)
  • on Linux,readlink()你的/ proc/<pid>/exe链接,希望你还没有通过硬链接,或者只是硬编码的路径,如果你是通过packetmanager无论如何安装