
On Sun, Dec 5, 2010 at 2:02 AM, joel falcou <joel.falcou@lri.fr> wrote:
In my own experience, problem lies in Proto/MPL/Fusion preprocessor time more than anything else. MPL became managable thansk to the preprocessed headers, maybe Fusion,Proto and maybe Spirit should do the same
+1
Does anybody have an idea on how this can be done? I seem to recall that GCC only had options for preprocessing when compiling an object file -- that would mean for making a .cpp file for each of the headers that need to be pre-processed independently, running it through the compiler's preprocessor (or wave) to get the appropriate output.
Maybe someone already has a script to do that which can be adapted?
What everybody is looking for is partial preprocessing, i.e. expansion of only some of the macros. Wave does not directly support this (does any preprocessor?), but you can do is to use #pragmas to enable/disable output generation. This creates the effect of partially expanding only a subset of the input. Here is an example: File: example.hpp: // stuff here will be preprocessed but not be output #if defined(__WAVE__) && defined(CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 1, output: "preprocessed/example.hpp") #endif // stuff here will be preprocessed and written to the file // preprocessed/example.hpp (here: relative to example.hpp) #if defined(__WAVE__) && defined(CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif // stuff here will be preprocessed but not be output File: example.cpp // stuff here will be preprocessed but not be output #include "example.hpp" The crucial trick is to invoke the wave driver with the --output=- (short option: -o-) command line option, which starts off with the output suppressed. Having to add -DCREATE_PREPROCESSED_FILES is obvious. Regards Hartmut --------------- http://boost-spirit.com