[CMake] Boost.Test, cmake, and visual studio
Steve M. Robbins
steve at sumost.ca
Wed Aug 29 10:19:51 EDT 2007
Hi,
I'd appreciate some advice for writing test cases using Boost.Test
under windows / msvc.
My first trial was, following the advice of the Boost.Test authors
(http://www.boost.org/libs/test/doc/usage/msvc_net.html), to create a
custom build step in visual studio. This produces output that visual
studio can parse and display as a list of errors to step through.
Such rules, of course, get blown away each time CMake runs.
So I cracked the CMake book and started learning about
ADD_CUSTOM_TARGET. After some struggle I learned about
ENABLE_TESTING / ADD_TEST and tried that route instead.
I got as far as the following:
ENABLE_TESTING()
ADD_TEST( runTestSuite
${EXECUTABLE_OUTPUT_PATH}/testSuite --report_level=no
)
This creates a "RUN_TESTS" rule that I can "build" to run the tests --
just what I was after. Unfortunately, ctest swallows all the output
from testSuite so I don't know which test of the suite failed nor
which line of code. Therefore, I don't have the nice error list. If
I could run ctest with the --verbose option, I think it would be
perfect, but I don't know how to convince cmake to pass --verbose to
ctest. I looked in vain for a variable to set. Any idea?
Reluctantly, I gave up and went back to ADD_CUSTOM_TARGET. The
following gives me exactly what I want:
PROJECT(examples)
[...]
ADD_EXECUTABLE( testSuite ${testSuite_SRCS} )
set( testSuite_EXE C:/blah/examples/debug/testSuite.exe )
ADD_CUSTOM_TARGET( RUN_TESTS
${testSuite_EXE} --report_level=no
# ${examples_BINARY_DIR}/testSuite.exe --report_level=no
# ${PROJECT_BINARY_DIR}/testSuite.exe --report_level=no
# ${EXECUTABLE_OUTPUT_PATH}/testSuite --report_level=no
DEPENDS ${testSuite_EXE}
)
But there are two flaws that I need help with.
1. I need a better way to find the test binary. The three
commented-out lines are things I tried but none worked. There must be
a variable that tells me where testSuite.exe is, but I can't find it.
Note that EXECUTABLE_OUTPUT_PATH is not set; however, the analogous
usage in ADD_TEST (see above) *did* work! (???)
2. The dependency on testSuite_EXE doesn't work: if I modify one of
the testSuite sources, running the custom target doesn't rebuild
testSuite.exe. Maybe this is a symptom of #1?
Thanks for reading this far.
Any suggestions welcome.
-Steve
More information about the CMake
mailing list