Xcode项目源文件自动复制

时间:2017-04-13 11:23:58

标签: c++ xcode

我目前在xcode上遇到c ++问题。当我做fopen(" verShader.vsh"," r")时,它返回NULL指针。

如果我将verShader.vsh放到/ Users / apple / Library / Developer / Xcode / DerivedData / HollowWorld -hghymrkhtbuguoaiwgp tundpakuz / Build / Prod ucts / Debug,fopen()将起作用。但是在main.cpp的同一目录下的文件是/ Users / apple / Developer / C ++ / HelloWorld / HelloWorld。

无论如何,当我构建项目时,它可以自动复制" verShader.vsh"执行文件的目录?enter image description here

2 个答案:

答案 0 :(得分:1)

  

它返回NULL指针,因为工作空间是... / DerivedData / ...而" verShader.vsh"放在main.cpp的目录中

那是因为您正在使用文件名" verShader.vsh"没有提供文件的路径。 Mac(和iOS)应用程序包具有特定的结构,所有资源都存储在特定子目录中,而不是可执行文件或工作目录。

  

无论如何,当我构建项目时,它可以自动复制" verShader.vsh"执行文件的目录?

这是错误的方法 - 您仍然需要知道要复制的文件的路径,一旦您知道这一点,您可能只需将其读取到它所在的位置复制它。在Objective-C或Swift中,这很容易:

NSString * path = [[NSBundle mainBundle] pathForResource:@" verShader" ofType:@" VSH"];

在C ++中,您可以使用Core Foundation执行相同的操作:

CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef url = CFBundleCopyResourceURL(mainBundle, CFSTR("verShader"), CFSTR("vsh"), NULL);
char path[255];  // space for the path
Boolean success = CFURLGetFileSystemRepresentation(url, true, path, 255);

(警告:因为我需要使用Core Foundation,所以已经有一段时间了,所以请使用上面的代码作为起点,但不要害怕自己检查docs并制作任何必要的更正。)

获得路径后,可以将其与常用的C / C ++文件例程一起使用,例如fopen()

答案 1 :(得分:0)

我终于通过在构建阶段添加“复制文件”来解决这个问题 enter image description here