Обновление:
Как указал @mathstuf в своем собственном ответе , начиная с версии 2.8.12 CMake поддерживает выражения генератора в аргументе WORKING_DIRECTORY
add_test
.Это делает остальную часть моего ответа применимой только к CMake v2.8.11 и ниже.
Насколько я знаю, на самом деле невозможно пропустить "$" через ADD_TEST
, пока он не закончитсяescape * in CTestTestfile.cmake
.
Действительно, «CMake» способ справиться с этой ситуацией, вероятно, состоит в том, чтобы передать зависимые exe в test 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) использование поведения CTest путем создания файла CTestCustom.cmake
, который вызывается до CTestTestfile.cmake
.После запуска CMake CTestTestfile.cmake
имеет строку
SET_TESTS_PROPERTIES(test PROPERTIES WORKING_DIRECTORY "@WORKING_DIR@")
. При запуске CTest и вызове CTestCustom.cmake
, "@WORKING_DIR@"
заменяется на правильное значение.
Это действительно хак;беспорядок с автоматически сгенерированными файлами CMake вызывает проблемы, но это может произойти до тех пор, пока у вас не будет времени на рефакторинг ваших тестов или пока CMake не сможет лучше поддерживать конфигурацию WORKING_DIRECTORY
.