更新:
正如@mathstuf在他自己的回答中指出的那样,从 2.8.12 版开始,CMake 支持在. 这使得我的其余答案仅适用于 CMake v2.8.11 及更低版本。WORKING_DIRECTORY
add_test
据我所知,如果ADD_TEST
没有最终在CTestTestfile.cmake
.
真正处理这种情况的“CMake”方法可能是将依赖的 exe 作为命令行参数传递给测试 exe,这将涉及更改测试代码。如果依赖的可执行文件都是 CMake 目标,则可以在ADD_TEST
命令中使用“ $<TARGET_FILE:tgt>
”引用它们,其中tgt
CMake 目标的名称。
但是,您可以使用一个大而肮脏的技巧来解决这个问题。将您的ADD_TEST
命令替换为:
ADD_TEST(NAME test WORKING_DIRECTORY "@WORKING_DIR@" COMMAND test ${TEST_ARGS})
FILE(WRITE ${CMAKE_BINARY_DIR}/CTestCustom.cmake
"SET(WORKING_DIR \"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/\\\${CTEST_CONFIGURATION_TYPE}\")\n")
FILE(APPEND ${CMAKE_BINARY_DIR}/CTestCustom.cmake
"CONFIGURE_FILE(${CMAKE_BINARY_DIR}/CTestTestfile.cmake ${CMAKE_BINARY_DIR}/CTestTestfile.cmake @ONLY)\n")
这是(ab)通过创建一个CTestCustom.cmake
文件来使用 CTest 的行为,该文件在CTestTestfile.cmake
. 运行 CMake 后,CTestTestfile.cmake
有行
SET_TESTS_PROPERTIES(test PROPERTIES WORKING_DIRECTORY "@WORKING_DIR@")
通过运行 CTest 并调用CTestCustom.cmake
,将"@WORKING_DIR@"
替换为正确的值。
这真的是一个黑客;弄乱自动生成的 CMake 文件是自找麻烦,但在您有时间重构测试或 CMake 能够更好地支持 per-configuration 之前,它可以做到WORKING_DIRECTORY
。