使用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包链接。
相关文章:
- 如何使用cppcheck处理半相对包含路径
- 如何确定包含路径的来源?
- 生成文件缺少包含路径 尽管路径存在并已定义
- 更改包含路径
- 在 Android Studio 中添加 C/C++ 的包含路径
- 如何设置 CMake 来构建包含路径包含的代码,如 #include < libdir/lib>?
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- 如何在 pybind11 项目中设置包含路径
- CLion 不索引任何外部包含路径
- VS代码无法识别包含路径
- 使用相对标头包含路径重新分析 ASTUnit 失败
- 如何在忍者上添加包含路径,并为VS 2019添加叮当
- 使用 glibc 2.7 包含路径编译失败
- 通过程序代码行设置C++包含路径
- Visual Studio添加真正"global"默认包含路径
- target_include_directories生成的包含路径
- C++'Undefined reference to'错误,尽管包含路径中的头文件中存在函数定义
- 如何从 qmake 中的包含路径中删除项目的根目录
- 是什么让 clang 在包含路径的子目录中看起来?
- 如果库的包含路径设置不符合预期,如何引发编译错误