2 Stimmen

im tcl-Skript, exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim" funktioniert nicht

Ich versuche, die gcc-Testsuite mit einem Treiberskript in tcl auszuführen. Wenn ich schreibe

if {[catch {exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim"} errmsg ]} {
    puts "Test finished with failures\n $errmsg"
} else {
    puts "Test finished"
}

Dies ergibt folgenden Fehler

Test mit Fehlern beendet

make: nicht erkannte Option `--target_board=atmega128-sim"'

Verwendung: make [Optionen] [Ziel] ... ......

Wenn ich jedoch die compile.exp aus den RUNTESTFLAGS entferne, funktioniert es einwandfrei.

if {[catch {exec make check RUNTESTFLAGS="--target_board=atmega128-sim"} errmsg ]} { 

.....

Liegt es an den doppelten Anführungszeichen, die im Argument RUNTESTFLAGS enthalten sind? Ich muss make check mit verschiedenen RUNTESTFLAGS ausführen. Bitte schlagen Sie einen Weg vor, dies zu erreichen.

Vielen Dank im Voraus!

7voto

Donal Fellows Punkte 125686

Zunächst einmal geht es in dieser Frage um den Kern:

exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim"

Alles andere ist nur (korrekte) Verpackung. Das Problem ist, dass Sie oben die Bourne-Shell-Syntax verwenden, nicht die Tcl-Syntax, so dass die obigen Zeilen mit RUNTESTFLAGS auf "compile.exp (mit dem Zitat) und der Rest wird als ein weiteres Argument gesendet, um zu machen. Das ist nicht das, was Sie wollen! (Tcl lässt eine Zeichenkette in doppelten Anführungszeichen nur am Anfang eines Wortes beginnen; die Bash ist da nachsichtiger.) Eine korrekte Version wäre:

exec make check "RUNTESTFLAGS=compile.exp --target_board=atmega128-sim"

Aber es ist einfacher und viel klarer aufzuteilen, etwa so:

set runTestFlags "compile.exp --target_board=atmega128-sim"
exec make check RUNTESTFLAGS=$runTestFlags

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