Как передать $ {CTEST_CONFIGURATION_TYPE}, используя add_test в cmake - PullRequest
2 голосов
/ 27 февраля 2012

Я не могу понять, как передать $ {CTEST_CONFIGURATION_TYPE}, используя add_test в cmake, без CMake, добавляющего дополнительные escape-символы.

В настоящее время я использую cmake для генерации файлов проекта VS и настройки RUNTIME_OUTPUT_DIRECTORY, и мне нужно использовать этот каталог + конфигурация в качестве рабочего каталога для нескольких тестов, поскольку они зависят от других встроенных исполняемых файлов.

Я пытался использовать

add_test(NAME test 
     WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/\${CTEST_CONFIGURATION_TYPE}"
     COMMAND test ${TEST_ARGS})

Это правильно находит мой тестовый исполняемый файл, однако сгенерированный файл CTestTestfile.cmake содержит

WORKING_DIRECTORY "<CORRECT_RUNTIME_PATH>/\${CTEST_CONFIGURATION_TYPE}"

Есть ли я в любом случае могузаставить это работать или мне просто придется каждый раз передавать правильный каталог в тест через командную строку?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2013

В настоящее время это невозможно в общем случае.В следующей версии CMake вы сможете использовать функцию этого commit для использования выражений генератора в ваших тестовых свойствах.

1 голос
/ 28 февраля 2012

Обновление:

Как указал @mathstuf в своем собственном ответе , начиная с версии 2.8.12 CMake поддерживает выражения генератора в аргументе WORKING_DIRECTORYadd_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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...