Avoid all system include paths


I want to make clang parser to avoid all default and builtin include path in my system (Ubuntu 14.04.5 LTS) for lib C and C++ stl (GNU, LLVM or whatever). I’m using the two most canonical options for doing that (I think): -nobuiltininc and -nostdinc++, also tried to change some roots or prefixes with -isysroot , -iwithprefix or --gcc-toolchain, but still with no luck.

A simple example of my clang unwanted behavior could be:

$ echo ‘#include <aio.h>’ > aio.cc

$ clang++ -nobuiltininc -nostdinc++ -v aio.cc
clang version 3.9.1-svn281634-1~exp1 (branches/release_39)

ignoring nonexistent directory “/include”
#include “…” search starts here:
#include <…> search starts here:
End of search list.

So in this execution clang ends up finding the header aio.h (in /usr/include/), while this is just the behavior I’m looking forward to modify. Any ideas to change it?

With the clang verbose option, you can see that those paths are included before the parser starts, using flags like: -internal-isystem and -internal-externc-isystem, there is a way to change or turn-off those internal settings?

Thanks in advance!


Remove ‘-nobuiltininc’ and substitute ‘-nostdinc’. That’s in addition to ‘-nostdinc++’

Remove '-nobuiltininc' and substitute '-nostdinc'. That's in addition to

Great answer Duglas, thank you very much, it has done perfectly for my
proposes... On my free time I'm working on a tool based on libclang to
provide an a generic API as facilitator to: parse, query and navigate
through a large database of C plus plus code project, and I'm putting all
my efforts specially on caching external headers parse, to optimize on
re-parse time of huge inline third party libraries that are shared between
translation units (obviously considering the preprocessor issues).