在Xcode中难以使用带有相对路径的SDL_LoadBMP
Difficulty in using SDL_LoadBMP with relative path in Xcode
首先,我知道这个问题已经被问过很多次了;我读了至少五到十种不同的答案,但没有一种答案适合我。我有一行:
helloWorld = SDL_LoadBMP("helloworld.bmp");
在我的Xcode 5项目的main.cpp
文件。目录结构如下:
TestProject1
main.cpp
Resources
helloworld.bmp
TestProject1.1
TestProject1.xcodeproj
当然,我尝试了不同的路径,即Resources/helloworld.bmp
,是的,资源文件夹被导入到项目中。但是,该语句返回NULL
,因为(根据SDL_Error)它找不到文件。现在,这一行:
helloWorld = SDL_LoadBMP("/fully/qualified/path/to/helloworld.bmp");
工作得很好,所以它不是我的代码的问题。让Xcode与资源的相对路径一起工作的普遍接受的方式是什么?当我做一个更大的项目时,我正在寻找一种可移植的方法(到SDL支持的平台,不同计算机/设备上的ofc),如果Xcode不能使可移植的c++项目,我愿意使用不同的IDE。我在阅读其他问题后尝试过的其他杂项:
add helloworld.bmp
to Build Phases> Copy Files.
添加代码:
// ----------------------------------------------------------------------------
// This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle
#ifdef __APPLE__
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
char path[PATH_MAX];
if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
{
// error!
}
CFRelease(resourcesURL);
chdir(path);
std::cout << "Current Path: " << path << std::endl;
#endif
// ----------------------------------------------------------------------------
到main.cpp
的开头(在if (!CFURL...)
行返回"Expected unqualified-id"编译错误)。
使用绝对路径-正如我所说,这是可行的,但我想要可移植性。
调用getcwd
:这是c++代码。我是不是漏掉了什么?getcwd
不像是c++函数
在您的Build Phases
中,您需要创建一个类型为Copy Files
的新构建阶段。
设置Destination
为"资源",并将子路径留空,除非你想在你的资源中有一个子文件夹(当你有很多并且想要分离例如字体,纹理,声音等时可以使用)
不勾选Copy only when installing
然后将资源添加到构建阶段,在本例中为helloworld.bmp
你应该可以加载:
helloWorld = SDL_LoadBMP("helloworld.bmp");
或者如果使用子路径:
helloWorld = SDL_LoadBMP("textures/helloworld.bmp");
这与您可以将SDL2.framework与应用程序捆绑在一起的方式相同。这里有一个教程- http://zamma.co.uk/setup-sdl2-in-xcode-osx/,在第3部分中,它描述了如何捆绑框架,如果你感兴趣的话。
总的来说,做完全可移植构建的最好方法是像CMake或Gradle这样的东西。
- 如何使用cppcheck处理半相对包含路径
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何获取 CMake 单元测试的相对路径?
- Bazel:http_archive()中url的相对本地路径
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- 从另一个应用启动我的应用时出现相对路径更改问题
- CMake 链接 2 个具有相对路径的库
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 定义相对包括路径
- cmake:包括vs vs add_subDirectory:相对标头文件路径
- 使用相对标头包含路径重新分析 ASTUnit 失败
- 在可执行文件中使用带有符号链接的相对路径
- C++流找不到相对路径
- 如何将COM .tlb文件导入具有相对路径C++文件中?
- C++包括断开的相对路径
- CMake 安装具有相对路径的目标
- CMake为什么通过相对路径链接外部库
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径
- 在“其他包含目录”中添加的路径相对于什么
- 如何获得与给定的相对路径相对应的绝对库文件名