繁体   English   中英

使用clang ++和SDL包含路径

[英]Include path using clang++ and SDL

我有一个SDL程序,需要在Mac上使用以下代码进行编译:

#include <SDL.h>

我已经使用MacPorts安装了libsdl,并且sdl-config --cflags的输出是:

-I/opt/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE

确实是SDL标头所在的位置:

$ ls /opt/local/include/SDL
SDL.h               SDL_cpuinfo.h           SDL_keyboard.h          SDL_rwops.h
...

然后我的Makefile使用以下命令调用编译器(clang ++):

CXXFLAGS=`sdl-config --cflags`

-v调用编译器表明编译器已包含在搜索路径中:

#include "..." search starts here:
#include <...> search starts here:
 /opt/local/include/SDL
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

但是编译器错误:

./drawable.h:4:10: fatal error: 'SDL.h' file not found
#include <SDL.h>
         ^

如果将其更改为#include <SDL/SDL.h> ,它可以很好地编译,但是该程序需要在其上编译的其他(Linux)机器没有这样指定。 我对如何设置包含路径不了解什么?

编辑:

这是一个最小的示例:

$ cat main.cpp
#include <SDL.h>
int main(int argc, char *argv[]) { }

$ sdl-config --cflags
-I/opt/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE

$ ls /opt/local/include/SDL/SDL.h
/opt/local/include/SDL/SDL.h

$ clang++ -v `sdl-config --cflags` main.cpp
...
#include "..." search starts here:
#include <...> search starts here:
 /opt/local/include/SDL
....
main.cpp:1:10: fatal error: 'SDL.h' file not found
#include <SDL.h>
         ^
1 error generated.

回答:

SDL.h原来是断开的符号链接,这是我自己的错。

我认为在您的Makefile中,CXXFLAGS不包含在编译命令中。

您的Makefile应该具有以下内容:

$(CXX) $(CXXFLAGS) $(SRC) -o $(EXE)

好的,这只是我自己的愚蠢,但也许其他人会从中受益。 我创建了/opt/local/include/SDL目录,并使用指向/Library/Frameworks/SDL.framework/Headers实际头文件的软链接填充了该目录,因为我的项目依赖于前者。 然后,在尝试另一种安装SDL的方法时,我删除了框架,留下了一堆无效链接。 不带参数的ls我显示文件名,但不能表示它们是链接,这是我在这一点上已经忘记的。 因此, SDL.h实际上并不存在。 较聪明的方法可能是对目录进行软链接,这可能会给出更有用的错误消息,但我也尝试在其中放置一些其他SDL包链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM