Makefile: Error bei Shell Commandos ignorieren
-
Hallo,
ich habe ein eher nerviges Problem mit einem Makefile.
Ich will nachdem das Executable gebaut worden ist, die xml Dateien aus einem Ordner in einen anderen Ordner copieren. Nur kann es auch sein, dass gar
keine xml Dateien vorhanden sind, cp gibt mir dann einen error, der auf der Konsole erscheint. Das ist laestig.Im Doc zu Make heisst es ja eigentlich:
To ignore errors in a command line, write a
-' at the beginning of the line's text (after the initial tab). The
-' is discarded before the command is passed to the shell for execution.http://www.gnu.org/software/make/manual/make.html
Also habe ich das in etwa so gemacht:
... .PHONY: all all: $(SERVER) $(CLIENT) -cp ./scripts/*.xml ./bin/ $(SERVER): ... $(CLIENT): ...
Nur das funktioniert nicht. Er kopiert zwar die xml Dateien, aber wenn keine vorhanden sind bekomme ich folgenden Error:
cp ./scripts/.xml ./bin/
cp: cannot stat `./scripts/.xml': No such file or directory
make: [all] Error 1 (ignored)Kann man das irgendwie abstellen, dass ich eine Fehlermeldung bekomme, bzw wie kann ich die ignorieren lassen? Eig will ich gar nichts von cp im output von make lesen.
PS:
Mittlerweile habe ich folgende Zeile:.PHONY: all all: $(SERVER) $(CLIENT) -cp ./scripts/*.xml ./bin/ 2> /dev/null &
Das funktioniert soweit, nur - warum funktioniert '-' nicht richtig im Makefile? Kann man das eleganter loesen, als nach /dev/null zu pipen?
-
versuch mal mit
all: $(SERVER) $(CLIENT) cp ./scripts/*.xml ./bin/ ; true
Alternativ kannst du make mit
make -i
aufrufen, was zum Ignorieren der Fehler führt.
-
make -i
sollte das selbe sein wie das special target .IGNORE. Beides habe ich ausprobiert, letztendlich sollte es sogar dasselbe sein wie das ausfuehren der Shell Commandos per '-'. Wobei im Doc '-' sogar empfohlen wird(!), weil es "flexibler" sei.
.IGNORE: all
Dh. ich bekomme immer noch einen Fehler. Warum verstehe ich nicht, ich habe es auf verschiedenen Linux Maschinen gestestet und bin verbluefft. Soll das etwa so sein? Ist das ein Fehler?
-
Im Makefile gibst Du an, dass make den Fehler beim cp ignorieren soll. Das tut make auch. Die Ausgabe kommt von cp, die kann und wird make nicht beeinflussen, das musst Du schon selbst erledigen (wie mit der Pipe geschehen).