我有以下文件foo.cpp
:
#include <vector>
struct MyClass
{
std::vector<int> v;
};
可以用clang成功编译(我在Ubuntu 13.04 32bit上使用clang 3.3):
clang++ -c foo.cpp
现在我要打印AST:
clang++ -cc1 -ast-print foo.cpp
我遇到以下错误
foo.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
^
struct MyClass {
};
1 error generated.
看起来clang++ -cc1
不了解系统包含文件等。
我想知道如何为clang++ -cc1
设置包含?
答案 0 :(得分:8)
答案 1 :(得分:8)
您需要设置正确的包含路径。 在我的系统上我添加了
-I/usr/include/i386-linux-gnu/c++/4.8 -I/usr/include/c++/4.8
到编译器标志。第一个是它可以找到的 比特/ C ++的config.h 当然4.8是由于我使用的编译器兼容g ++ - 4.8
我还添加了
-std=c++11 -stdlib=libstdc++
作为编译器选项。 希望这有帮助
答案 2 :(得分:1)
@john是correct。对于子孙后代,FAQ的相关部分(调整名称以匹配问题):
clang -cc1
是前端,clang
是驱动程序。驱动程序使用适合您系统的选项调用前端。要查看这些选项,请运行:$ clang++ -### -c foo.cpp
某些clang命令行选项是仅驱动程序选项,有些是仅前端选项。仅限前端选项仅供clang开发人员使用。用户不应直接运行
clang -cc1
,因为-cc1
选项无法保证稳定。如果您想使用仅前端选项(“
-cc1
选项”),例如-ast-dump
,那么您需要获取驱动程序生成的clang -cc1
行,添加您需要的选项。或者,您可以运行clang -Xclang <option> ...
强制驱动程序[将] <option>
传递给clang -cc1
。
我做了后者(-Xclang
)以发出预编译的头文件:
/usr/bin/clang++ -x c++-header foo.hpp -Xclang -emit-pch -o foo.hpp.pch <other options>
^^^^^^^
如果没有-Xclang
,则clang++
会忽略-emit-pch
。当我尝试-cc1
时,我遇到与OP相同的问题 - clang++
已接受-emit-pch
,但没有驱动程序通常提供的其他选项。