c_preproc¶
C/C++ preprocessor for finding dependencies
Reasons for using the Waf preprocessor by default
Some c/c++ extensions (Qt) require a custom preprocessor for obtaining the dependencies (.moc files)
Not all compilers provide .d files for obtaining the dependencies (portability)
A naive file scanner will not catch the constructs such as “#include foo()”
A naive file scanner will catch unnecessary dependencies (change an unused header -> recompile everything)
Regarding the speed concerns:
the preprocessing is performed only when files must be compiled
the macros are evaluated only for #if/#elif/#include
system headers are not scanned by default
Now if you do not want the Waf preprocessor, the tool +gccdeps* uses the .d files produced during the compilation to track the dependencies (useful when used with the boost libraries). It only works with gcc >= 4.4 though.
A dumb preprocessor is also available in the tool c_dumbpreproc