Directory prj/test
contains some test scripts t01.exe
, t02.exe
etc. Some of them need input data d01.dat
etc, also provided in prj/test
. The names of these data files are hard-coded in the tests, and I cannot easily change this. The control file CMakeLists.txt
contains
enable_testing()
file(GLOB test_sources "t*")
foreach(test_src ${test_sources})
string(REGEX REPLACE ".*/" "" test_name "${test_src}")
string(REGEX REPLACE ".exe$" "" test_name "${test_name}")
add_test(${test_name} "${test_src}")
endforeach(test_src)
I'm building the project in a subdirectory prj/build
. ctest
works fine ... until a test requires input data. Obviously, they are not found because they reside in prj/test
whereas the test runs in prj/build/test
.
Hence my questions:
add_test
command accepts WORKING_DIRECTORY
option. You can set this option to a directory where a test is located. So, the test will find its data file:
add_test(NAME ${test_name} COMMAND "${test_src}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
The variables ${CMAKE_CURRENT_SOURCE_DIR}
and ${CMAKE_SOURCE_DIR}
are helpful. The first one is the source directory to the current binary location. The latter is the root to the top level of the source tree.
Supposed you have an input file at prj/test/inputfile
you could get the path to it with${CMAKE_CURRENT_SOURCE_DIR}/inputfile
. You can pass the path as an argument to your test.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With