23 Stimmen

Schleifen über Dateien, die mit einer Wildcard in CMake übereinstimmen

Ich möchte CMake verwenden, um einige Tests durchzuführen. Einer der Tests soll ein Validierungsskript für alle Dateien aufrufen, die "fixtures/*.ext" entsprechen. Wie kann das folgende Pseudo-CMake in ein echtes CMake umgewandelt werden?

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

38voto

JesperE Punkte 61161

Zum Beispiel so:

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

Doch damit wird nicht gerechnet i für Sie. Ist es wichtig, dass Sie dem Test ein ganzzahliges Suffix geben? Andernfalls könnten Sie file(...) um den zu verwendenden Dateinamen (ohne Erweiterung) zu extrahieren.

5voto

richq Punkte 53842

Sie benötigen enable_testing um die Testmaschinerie von CMake zu aktivieren. Die add_test benötigt den Namen des Tests und den auszuführenden Befehl. Die Syntax lautet wie folgt

Um einen Zähler hinzuzufügen, können Sie die math() Funktion. Mit der folgenden Funktion können Sie auch Quellcode-Builds ausführen, indem Sie den vollständigen Pfad zu den Eingaben 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()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X