Зависимость во время выполнения от сгенерированного файла в CMake

У меня есть тест (add_executable(MyTest ...)), которому нужен файл во время выполнения. Файл создается с помощью пользовательской команды. Я хотел бы смоделировать эту зависимость времени выполнения в CMake.

В настоящее время существует зависимость времени сборки от сгенерированного файла с использованием add_dependencies(MyTest GenerateFile), где GenerateFile — это настраиваемая цель, которая зависит от выходных данных настраиваемой команды. Недостаток: MyTest не начинает компилировать код, пока GenerateFile не завершит сборку. В этом нет необходимости — я хотел бы построить MyTest и создать файл параллельно.

Другой вариант, который я рассматривал, заключался в добавлении новой цели MyTestAndGenerateFile, которая зависит как от MyTest, так и от GenerateFile. Недостаток: вызов make MyTest больше не создает файл. Вместо этого нужно не забыть позвонить make MyTestAndGenerateFile.

В качестве альтернативы новую цель можно назвать MyTest, а тест можно добавить с помощью add_executable(MyTest_Code ...). Недостаток: при использовании генератора Visual Studio тестовый код теперь будет находиться в проекте с именем MyTest_Code вместо MyTest, что нарушает соглашения об именах. Кроме того, теперь вам нужно создать проект MyTest, но запустить проект MyTest_Code, поэтому вы больше не можете использовать Установить как стартовый проект. .

Короче говоря, я ищу форму add_dependencies, в которой говорится, что зависимость нужна не во время сборки, а во время выполнения.


person user1083696    schedule 19.03.2018    source источник
comment
CMake не может отслеживать, как вы запускаете скомпилированные двоичные файлы. Единственный способ заставить его отслеживать это добавить пользовательскую цель, которая будет его запускать.   -  person arrowd    schedule 19.03.2018
comment
@arrowd Возможно, зависимость во время выполнения здесь вводит в заблуждение, но я не мог придумать лучшего термина. Я только хочу убедиться, что GenerateFile обновляется всякий раз, когда строится MyTest, но без MyTest ожидания завершения GenerateFile перед началом сборки.   -  person user1083696    schedule 19.03.2018


Ответы (1)


Что вы можете попробовать, так это добавить тест, который вызывает цель GenerateFile, и сделать ваш фактический тест зависимым от первого. Что-то вроде этого:

add_test(NAME MakeGenerateFile COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target GenerateFile)
add_test(MyTest MyTest)
set_tests_properties(MyTest PROPERTIES DEPENDS MakeGenerateFile)
person piwi    schedule 19.03.2018