|
Boost Users : |
From: Steven T. Hatton (hattons_at_[hidden])
Date: 2004-09-04 05:22:18
I believe I figured out how the examples in the 'subproject
libs/test/example ;' are being compiled. Basically it goes like this:
bjam reads the Jamfile which contains this rule:
rule boost-test-example ( example-name : lib-name )
{
exe $(example-name) : $(example-name).cpp <lib>../build/$(lib-name)
: <sysinclude>$(BOOST_ROOT)
<stlport-iostream>on
<borland><*><cxxflags>-w-8080 ;
}
followed by a series of invocation of that rule such as:
boost-test-example unit_test_example1 : boost_unit_test_framework ;
The rule is evaluated by putting the first argument 'unit_test_example1' in
the slot for the target name, and for the sources required to build. In
addition to unit_test_example1.cpp, the expression <lib>../build/$(lib-name)
is evaluated to add the library resulting from compiling other source files.
These are named by reading $(BOOST_ROOT)/libs/test/build/Jamfile and
expanding the target:
lib boost_unit_test_framework : <template>boost_test_lib
../src/$(UTF_SOURCES).cpp ;
The <template> adds some boiler-plate information and
the ../src/$(UTF_SOURCES).cpp expands the following list:
UTF_SOURCES =
execution_monitor
test_tools
unit_test_parameters
unit_test_log
unit_test_monitor
unit_test_result
unit_test_suite
unit_test_main
supplied_log_formatters
;
to create a list of file names of the form:
../src/execution_monitor.cpp
If the library does not already exists, these are compiled, and the results
are placed in the location specified by this directive:
install test lib
:
[ unless $(NT) :
<dll>boost_prg_exec_monitor
<dll>boost_test_exec_monitor
<dll>boost_unit_test_framework ]
<lib>boost_prg_exec_monitor
<lib>boost_test_exec_monitor
<lib>boost_unit_test_framework
;
Since they have already been compiled, bjam tells the compiler to link against
them.
After rebuilding all of boost and installing the headers and libraries to the
default location, I am now able to compile one of the examples as follows:
g++ -o unit_test_example5 unit_test_example5.cpp\
-lboost_unit_test_framework-gcc
I don't fully understand why I need the -l switch, but adding it enabled the
linker to succeed.
I assume I could find a way to modify the above mentioned Jamfiles to do
basically the same thing in my project directory, but the step of specifying
the sources with which to build the libraries seems inappropriate for using
the Unit Test Framework in my own project.
How do I tell bjam to link against the correct library file?
-- Regards, Steven
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net