2010-02-02 9 views
14

Ich möchte mit CMake einige Tests ausführen. Einer der Tests sollte ein Validierungsskript für alle Dateien aufrufen, die mit "fixtures/*. Ext" übereinstimmen. Wie kann das folgende Pseudo-CMake in echtes CMake umgewandelt werden?Schleifen über Dateien mit Wildcard in CMake

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

Antwort

24

So:

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

Aber dies berechnet nicht i für Sie. Ist es wichtig, dass Sie ein ganzzahliges Suffix zum Test haben? Andernfalls könnten Sie file(...) verwenden, um den zu verwendenden Dateinamen (ohne Erweiterung) zu extrahieren.

5

Sie benötigen enable_testing, um CMake's Prüfmaschinen zu aktivieren. Die add_test-Funktion benötigt den Namen des Tests und den Befehl zum Ausführen und die Syntax ist wie folgt.

Um einen Zähler hinzuzufügen, können Sie die math() Funktion verwenden. Im Folgenden können Sie auch die Quell-Builds auslassen, indem Sie den vollständigen Pfad zu den Eingängen angeben.

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