目录prj/test
包含一些测试脚本t01.exe
,t02.exe
等。其中一些还需要d01.dat
中提供的输入数据prj/test
等。这些数据文件的名称在测试中是硬编码的,我不能轻易改变它。控制文件CMakeLists.txt
包含
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)
我正在子目录prj/build
中构建项目。 ctest
工作正常......直到测试需要输入数据。显然,找不到它们是因为它们位于prj/test
,而测试则在prj/build/test
中运行。
因此我的问题是:
答案 0 :(得分:7)
add_test
命令接受WORKING_DIRECTORY
选项。您可以将此选项设置为test所在的目录。因此,测试将找到其数据文件:
add_test(NAME ${test_name} COMMAND "${test_src}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
答案 1 :(得分:1)
变量${CMAKE_CURRENT_SOURCE_DIR}
和${CMAKE_SOURCE_DIR}
很有帮助。第一个是当前二进制位置的源目录。后者是源树顶层的根。
假设您在prj/test/inputfile
处有一个输入文件,您可以使用${CMAKE_CURRENT_SOURCE_DIR}/inputfile
获取其路径。您可以将路径作为参数传递给测试。