Цикличное выполнение по файлам, соответствующим подстановочному знаку в CMake

Я хочу использовать CMake для запущения некоторых тестов. Один из теста должен назвать сценарий блока проверки допустимости на всех файлах, соответствующих "приспособлениям / *.ext". Как может преобразовать следующий pseudo-CMake в реальный CMake?

i=0
for file in fixtures/*.ext; do
  ADD_TEST(validate_${i}, "validator", $file)
  let "i=i+1"
done
17
задан Manuel 2 February 2010 в 10:33
поделиться

2 ответа

Вот так:

file(GLOB files "fixtures/*.ext")
foreach(file ${files})
  ... calculate ${i} to get the test name
  add_test(validate_${i}, "validator", ${file})
endforeach()

Но это не вычисляет i для вас. Важно ли, чтобы в тесте был целочисленный суффикс? В противном случае вы можете использовать file(...) для извлечения имени файла (без расширения).

28
ответ дан 30 November 2019 в 12:13
поделиться

Вам понадобится enable_testing , чтобы активировать механизм тестирования CMake. Для функции add_test требуется имя теста и команда для запуска, а синтаксис приведен ниже.

Чтобы добавить счетчик, вы можете использовать функцию math () . Следующее позволит вам также исчерпать исходные сборки, указав полный путь к входам.

cmake_minimum_required(VERSION 2.6)
enable_testing()

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/fixtures/*.ext")
set(validator ${CMAKE_CURRENT_SOURCE_DIR}/validator)
set(i 0)
foreach(filename ${files})
    add_test(NAME "validate_${i}"
       COMMAND "${validator}" ${filename})
    math(EXPR i "${i} + 1")
endforeach()
5
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: