2010-02-02 14 views
14

Quiero utilizar CMake para ejecutar algunas pruebas. Una de las pruebas debe llamar a un script de validación en todos los archivos que coincidan con "fixtures/*. Ext". ¿Cómo se puede transformar el siguiente pseudo-CMake en CMake real?Looping sobre archivos que coinciden con el comodín en CMake

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

Respuesta

24

De esta manera:

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

Pero esto no calcula i para usted. ¿Es importante que tengas un sufijo entero para la prueba? De lo contrario, puede usar file(...) para extraer el nombre de archivo (sin extensión) para usar.

5

Usted necesita enable_testing para activar la maquinaria de pruebas de CMake. La función add_test necesita el nombre de la prueba y el comando para ejecutar y la sintaxis es la siguiente.

Para añadir un contador, puede utilizar la función math(). Lo siguiente le permitirá también quedarse sin compilaciones de origen especificando la ruta completa a las entradas.

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() 
Cuestiones relacionadas