Цикл по файлам, соответствующим шаблону в CMake - PullRequest
16 голосов
/ 02 февраля 2010

Я хочу использовать CMake для запуска некоторых тестов. Один из тестов должен вызывать скрипт валидатора для всех файлов, соответствующих «fixtures / *. Ext». Как превратить следующий псевдо-CMake в реальный CMake?

i=0
for file in fixtures/*.ext; do
  ADD_TEST(validate_${i}, "validator", $file)
  let "i=i+1"
done

Ответы [ 2 ]

27 голосов
/ 02 февраля 2010

Как это:

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

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

5 голосов
/ 02 февраля 2010

Вам нужно 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...