Subject: Re: [Boost-build] Generated header files.
From: Mathias Lorente (mathias.lorente_at_[hidden])
Date: 2008-12-04 03:34:42
Vladimir Prus wrote:
> 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.
>>>> - 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
> $(>) $(>) > $(<)
I have modified my header generator which takes one input file and
writes the corresponding header file in the same directory as the input
file. So I have the following bjam script:
: ../utils//gen header.txt
But this solution does not meet some requirements:
- Each time I launch bjam, the header generator is launched even if
header.txt has not been modified.
- My library (which relies on generated header) is rebuilt only the
second time I launch bjam: first time, headers are generated, second
time, headers are generated and the library is rebuilt. I suspect that
bjam checks the timestamp of the header files before they are generated
Here is the definition to build my library:
: [ glob-tree *.cpp : .svn ]
And for the header generator: exe gen : gen.cpp ;
Many thanks for your help.
> 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)
> $(>) $(>) > $(<: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
> - 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