7

目录prj/test包含一些测试脚本t01.exet02.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/buildctest工作正常......直到测试需要输入数据。显然,没有找到它们,因为它们驻留在其中,prj/test而测试运行在prj/build/test.

因此我的问题是:

  • 让测试找到输入数据的标准方法是什么?
  • 有没有一种不需要复制数据的方法(如果它们很大)?
  • 确实,符号链接在 Windows 下不起作用,因此不是可接受的解决方案?
4

2 回答 2

12

add_test命令接受WORKING_DIRECTORY选项。您可以将此选项设置为测试所在的目录。所以,测试会找到它的数据文件:

add_test(NAME ${test_name} COMMAND "${test_src}"
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
于 2015-10-20T09:07:31.040 回答
2

变量${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_SOURCE_DIR}是有帮助的。第一个是当前二进制位置的源目录。后者是源树顶层的根。

假设您有一个输入文件,prj/test/inputfile您可以使用${CMAKE_CURRENT_SOURCE_DIR}/inputfile. 您可以将路径作为参数传递给您的测试。

于 2015-10-20T08:12:25.110 回答