Зацикливание файлов, соответствующих шаблону в CMake
Я хочу использовать CMake для запуска некоторых тестов. Один из тестов должен вызвать валидатор script для всех файлов, соответствующих "fixtures/*. Ext". Как преобразовать следующий псевдо-CMake в настоящий CMake?
i=0
for file in fixtures/*.ext; do
ADD_TEST(validate_${i}, "validator", $file)
let "i=i+1"
done
Ответы
Ответ 1
Вот так:
file(GLOB files "fixtures/*.ext")
foreach(file ${files})
... calculate ${i} to get the test name
add_test(validate_${i}, "validator", ${file})
endforeach()
Но это не вычисляет i
для вас. Важно ли, чтобы у вас был полный суффикс для теста? В противном случае вы можете использовать file(...)
для извлечения имени файла (без расширения) для использования.
Ответ 2
Вам понадобится 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()