2010-02-02 3 views
14

Desidero utilizzare CMake per eseguire alcuni test. Uno dei test dovrebbe chiamare uno script di validazione su tutti i file corrispondenti a "fixtures/*. Ext". Come può trasformare il seguente pseudo-CMake in vero CMake?In loop su file che corrispondono a caratteri jolly in CMake

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

risposta

24

Ti piace questa:

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

Ma questo non calcola i per voi. È importante avere un suffisso intero per il test? In caso contrario, è possibile utilizzare file(...) per estrarre il nome file (senza estensione) da utilizzare.

5

È necessario enable_testing per attivare la macchina di prova di CMake. La funzione add_test richiede il nome del test e il comando da eseguire e la sintassi è la seguente.

Per aggiungere un contatore, è possibile utilizzare la funzione math(). Quanto segue ti consentirà anche di esaurire le build di origine specificando il percorso completo degli input.

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