2012-03-25 12 views
4

In einer Make-Datei gibt es eine Zeile:über CFLAGS in Makefile

CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 
&& echo -fno-stack-protector) 

Was ist der Einsatz von shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1? Es scheint nichts zu tun. Und wie funktioniert die ganze Linie? Vielen Dank im Voraus.

Antwort

4

Wenn Ihr Compiler nicht haben die Möglichkeit -fno-stack-protector es wird einen Fehlercode zurück (das heißt etwas !=0) sonst wird es zurückgeben 0 ("true" in Return-Codes bedeutet), was alles in Ordnung war. Jetzt

der Ausdruck bedeutet, dass foo && barbar wird nur dann ausgeführt werden, wenn ein nicht-foo Fehlercode zurückgibt (d.h. 0). Also, sehen Sie, wenn Ihr Compiler nicht dieses Flag hat, wird es "false" (etwas !=0) zurückgeben und der echo Befehl wird nie ausgeführt werden. Aber wenn es das Flag hat, wird echo ausgeführt.

+0

Hängt 'echo' diese Option an CFLAGS an? Warum gibt es kein Echo für die Ausgabe? – akirast

+2

@akirast: weil '$ (shell)' Standardausgabe erfasst - siehe http://www.gnu.org/software/make/manual/make.html#Shell-Function – Christoph

5

Es testet, ob -fno-stack-protector eine gültige Befehlszeilenoption für Ihren C-Compiler ist, und wenn es das ist, dann hängt diese Option an CFLAGS, sonst tut es nichts.

0

Ist es irgendwie Test ist -fno-Stack-Protector-Option verfügbar ist?

Verwandte Themen