Boost logo

Boost-Build :

Subject: Re: [Boost-build] Generated header files.
From: Vladimir Prus (ghost_at_[hidden])
Date: 2008-12-03 12:19:09


On Wednesday 03 December 2008 19:09:16 Mathias Lorente wrote:
> Vladimir Prus wrote:
> > On Wednesday 03 December 2008 17:36:05 Mathias Lorente wrote:
> >
> >> Dear list,
> >>
> >> I use bjam to build a library which relies on some generated header files.
> >> These files are generated by a specific application which is also built
> >> using bjam.
> >> I added a dependency for my library so that the application is built
> >> before the library.
> >> But:
> >> - I didn't manage to launch the application in order to generate the
> >> necessary header files before the library is being built.
> >>
> >
> > Hi Mathias,
> >
> > it's generally best to show what approaches you've tried, so that you
> > get help about your specific issue, not some approximation. Generally,
> > something like this should work:
> >
> >
> > exe header_generator : header_generator.cpp ;
> > make header.h : header_generator : @generate-header ;
> > actions generate-header
> > {
> > $(>) > $(<)
> > }
> > lib header_user : header_user.cpp : <implicit-dependency>header.h ;
> >
> > - Volodya
> >
> Hello Volodya,
>
> Thanks for your reply.
> In fact my 'header generator' uses input files (let's say .txt) which
> are parsed/modified/... to make the corresponding .h files.
> Until now, I was launching the generator by hand and it was working on
> all files in the specified directory (as command line parameter).
> I suppose I would have to modify it in order to make it take one file at
> a time.

For dependency tracking, it's best if each invocation takes specific input
and produces a single file. Otherwise, Boost.Build or you would have to run
your tool on all files. Here's how to modify my code to make it accept a source:

         make header.h : header_generator input.txt : @generate-header ;
         actions generate-header
        {
                 $(>[1]) $(>[2]) > $(<)
         }

This assumes that your tool accepts source file as parameter and prints output to stdout.
Note that $(<) is the name of the output file, including directory -- if your tool
always outputs files in the current directory you might want to use this:

         actions generate-header
        {
                cd $(<:D)
                 $(>[1]) $(>[2]) > $(<:D=)
         }

> Then I could probably generate a list of input files and use
> your piece of script (or try to use the generator from standard module).

Using generator, of course, it also possible. But in that case it's best to
have your input files have a specific extensions, so that they can be automatically
processed.

- Volodya


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk