如何告诉cmake/ctest下的测试在哪里找到它的输入数据...而不改变硬编码的文件名

Joa*_*m W 3 cmake ctest

目录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)
Run Code Online (Sandbox Code Playgroud)

我正在一个子目录中构建项目prj/build.ctest工作正常...直到测试需要输入数据.显然,找不到它们是因为它们存在于prj/test测试中prj/build/test.

因此我的问题:

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

Tsy*_*rev 7

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

add_test(NAME ${test_name} COMMAND "${test_src}"
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
Run Code Online (Sandbox Code Playgroud)