I am new to Boost.Build V2 and have been struggling for a while to get just a basic understanding I am finally making some progress in evaluating this to replace our current Imake/make build system.

 

Right now I am trying to figure out how to replicate builds for CxxTest files.  The basic idea is that you define a class, e.g. FooTS, derived from CxxTest::TestSuite.  You place the declaration in FooTS.h and the definition in FooTS.cpp.  In order to build the test driver you call a perl script to generate a FooTS_runner.cpp (our in-house convention):

 

cxxtestgen.pl <options> -o FooTS_runner.cpp FooTS.h

 

Then FooTS_runner.cpp and FooTS.cpp get compiled in to an executable (linking other libs).

 

I tried the following:

 

-        renamed FooTS.h to FooTS_runner.cxh

-        defined a new type CXXTEST_H associated with a new extension (.cxh)

-        defined an action that invoked the cxxtestgen.pl script appropriate to convert the .cxh file to a .cpp file

-        registered a standard generator that calls the action to perform the conversion.

 

 

In cxxtest.jam I have:

 

type.register CXXTEST_H : cxh ;

generators.register-standard cxxtest.gencxx-file : CXXTEST_H : CPP ;

action cxxgentest

{

  cxxtestgen.pl –o $(<) $(>)

}

 

This resulted in the following in my Jamfile (after importing cxxtest)

 

exe FooTS_runner : FooTS.cpp FooTS_runner.cxh : /* other requirements */ ... ;

 

Notice that I had to add the “_runner” to the cxh file so that there would not be two FooTS.o files (one from FooTS.cpp and one from processing FooTS.cxh and compiling the result).

 

It is unsatisfying to rename the header file this way because we have a filenaming convention where the definition and declaration of the FooTS class should be in FooTS.h and FooTS.cpp respectively.

 

I have two questions to hopefully improve my understanding:

 

1) If I wanted to continue with the .cxh approach, is writing a custom generator the way to process FooTS.cxh into FooTS_runner.cpp.  If so could someone please help me as it is neither clear what method to override (generate-targets?) nor how to do it to accomplish this task.

 

2) Ultimately I would like to get back to something closer I have with our current Imakefile system which was to define a new rule that took FooTS as the argument (I would settle for a rule that had to take FooTS.h and FooTS.cpp as arguments), generates FooTS_runner.cpp from FooTS.h and compiled and linked FooTS.cpp and FooTS_runner.cpp into an executable called FooTS_runner.

 

Any help would be greatly appreciated,

scott