Xcode包含文件路径混淆

时间:2013-12-01 09:56:38

标签: xcode path bundle libxml2 sdl-image

我正在Xcode 5中编写一个小C ++程序以获得乐趣,但这是我第一次使用Xcode而且我很困惑Xcode在打开项目中包含的文件时如何处理路径。我正在使用SDL2_image框架,当我想加载一个我已经包含在项目中的图像时,我就这样做了,它发现图像就好了:

IMG_LoadTexture(renderer, "image_name.png");

然而,这似乎在任何其他地方都没有用。我正在尝试使用libxml2加载xml文件,但是这段代码:

xmlDocPtr doc = xmlParseFile("doc_name.xml");

结果如下:

I/O warning : failed to load external entity "doc_name.xml"

当我尝试其他加载文件的方法时会发生类似的事情。我不确定这是因为SDL2_Image框架正在做一些特别的事情,还是因为我对事情的运作有一些其他根本的误解。所有文件都应该以相同的方式包含,我只需右键单击项目并选择“将文件添加到...”。编译时,它们会显示在应用程序的“Contents / Resources”文件夹中。我在stackoverflow上看到了关于如何在bundle中打开文件的其他问题(我假设它是内容文件夹?),但是我很困惑为什么我没有做任何那些答案建议让它工作的东西使用SDL_Image的东西。

我非常感谢任何帮助。到目前为止,我已经用互联网上的魔法构建设置解决了我所有的问题,我不明白,所以任何解释都说明我如何能够为自己想出这一点,以便下次我能够受到高度赞赏。

[UPDATE] 如果我使用路径“Application_Name.app/Contents/Resources/file_name”,我可以访问该文件。但是我不明白为什么我必须对除SDL2_Image库之外的所有内容执行此操作,并且我不希望我的路径依赖于应用程序的名称。

1 个答案:

答案 0 :(得分:1)

选项1)我认为这里的问题不是C ++代码,而是文件位置。 在XCode中,二进制程序构建在Executables文件位置中。您必须设置构建阶段,以通过“复制捆绑资源”将输入文件复制到可执行文件位置。见Apple's Documentation

选项2)或者,您可以使用硬编码路径并创建一个快速完成bash的安装程序,并且可以在每个阶段的XCode方案编辑器中轻松实现脚本运行。

选项3)像这样使用CoreFoundation和编译器宏:Relative Paths Not Working in Xcode C++