clang -cc1和系统包括

Rom*_*098 9 c++ clang abstract-syntax-tree include-path

我有以下文件foo.cpp:

#include <vector>

struct MyClass
{
  std::vector<int> v;
};
Run Code Online (Sandbox Code Playgroud)

它可以用clang成功编译(我在Ubuntu 13.04 32bit上使用clang 3.3):

clang++ -c foo.cpp
Run Code Online (Sandbox Code Playgroud)

现在我要打印AST:

clang++ -cc1 -ast-print foo.cpp
Run Code Online (Sandbox Code Playgroud)

我有以下错误

foo.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
         ^
struct MyClass {
};
1 error generated.
Run Code Online (Sandbox Code Playgroud)

看起来好像clang++ -cc1不知道系统包含文件等.我想知道如何设置包括clang++ -cc1

use*_*137 8

您需要设置正确的包含路径.在我的系统上我添加了

-I/usr/include/i386-linux-gnu/c++/4.8 -I/usr/include/c++/4.8 
Run Code Online (Sandbox Code Playgroud)

到编译器标志.第一个是它可以找到bits/c ++ config.h当然4.8是由于我使用的编译器兼容g ++ - 4.8

我还补充道

-std=c++11 -stdlib=libstdc++
Run Code Online (Sandbox Code Playgroud)

作为编译器选项.希望这可以帮助