I have the following file foo.cpp:
#include <vector>
struct MyClass
{
std::vector<int> v;
};
It can be successfully compiled with clang (I'm using clang 3.3 on Ubuntu 13.04 32bit):
clang++ -c foo.cpp
Now I want to print AST:
clang++ -cc1 -ast-print foo.cpp
and I've got the following error
foo.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
^
struct MyClass {
};
1 error generated.
It looks like clang++ -cc1 doesn't know about system include files etc.
I'm wondering how to set up includes for clang++ -cc1?
@john is correct. For posterity, the relevant portions of the FAQ are (with names tweaked to match the question) :
clang -cc1is the frontend,clangis the driver. The driver invokes the frontend with options appropriate for your system. To see these options, run:$ clang++ -### -c foo.cppSome clang command line options are driver-only options, some are frontend-only options. Frontend-only options are intended to be used only by clang developers. Users should not run
clang -cc1directly, because-cc1options are not guaranteed to be stable.If you want to use a frontend-only option (“a
-cc1option”), for example-ast-dump, then you need to take theclang -cc1line generated by the driver and add the option you need. Alternatively, you can runclang -Xclang <option> ...to force the driver [to] pass<option>toclang -cc1.
I did the latter (-Xclang) for emitting precompiled headers:
/usr/bin/clang++ -x c++-header foo.hpp -Xclang -emit-pch -o foo.hpp.pch <other options>
^^^^^^^
Without the -Xclang, clang++ ignored the -emit-pch. When I tried -cc1, I had the same problem as the OP — clang++ accepted -emit-pch but didn't have the other options the driver normally provides.
It's a Frequently Asked Question
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With