2013-10-23 10 views
6

Ich bin ein Paket bauen, die viele Makefiles bietet, hat jede Make-Datei hart wieGibt es eine Option für gcc, die die Flag -g verwirft?

in Seite etwas codiert
CFLAGS = -g -O2 -Wall ... 
CXXFLAGS = -g -O2 -Wall ... 

Ich möchte -g Option verwerfen, aber ich will nicht alle Makefiles bearbeiten (auch nicht automatisch mit sed oder etwas ähnliches). Das Skript configure, das mit dem Paket geliefert wird, hat Debug-Option nicht aktivieren/deaktivieren, aber ich kann es CFLAGS und CXXFLAGS Variablen übergeben und es verkettet ihre Werte an die CFLAGS und CXXFLAGS Variablen jeweils einschließlich der -g Option.

Gibt es eine Option, die -g verwerfen wird, falls sie angegeben wird? So etwas wie

gcc -option-im-looking-for -g file.c -o file 

Wird die binären file ohne Debug-Symbole bauen. Ich möchte die Binärdatei nicht entfernen, ich möchte, dass sie entfernt wird.

+0

Hmmm Sie könnten ein Skript schreiben, das mygcc aufgerufen, die empfangenen Argumente analysieren, unerwünschte Parameter entfernen und gcc aufrufen. Dann benutze mygcc als Compiler. Ich bin nicht stolz auf diese Antwort ^^ –

Antwort

9

Sie die Wirkung von -g durch Zugabe von -g0 negieren könnte. Zu sagen,

gcc -g -g0 foo.c -o file.o 

eine binäre identisch mit einer erhalten produzieren würde

sagen
gcc foo.c -o foo.o 

Zitiert man gcc:

-glevel 
    ... 
     Level 0 produces no debug information at all. Thus, -g0 negates 
     -g. 
+0

Sie sind der Mann! Danke für Ihre Antwort – e271p314

1

Sie müssen Makefiles nicht bearbeiten. außer Kraft setzen Sie die Variablen in der Befehlszeile:

$ cat Makefile 
CFLAGS = -g -Wall 
all: 
    echo $(CFLAGS) 
$ make 
echo -g -Wall 
-g -Wall 
$ make CFLAGS=-Wall 
echo -Wall 
-Wall 
+0

Aber CFLAGS ist eine sehr lange Linie (etwa 100 Optionen, enthält etc'), ich bin nicht zu wissen, was CFLAGS sein sollte. Alles, was ich weiß, ist, was ich nicht mag, aber ich kann nicht verstehen, wie ich es beheben kann. – e271p314

0

Da CFLAGS eine bash Variable Sie Muster Ersatz $ verwenden könnte {var/Muster/Ersatz} etwas wie $ {CFLAGS/-g //}, um -g zu entfernen. Überprüfen Sie Parameter Substitution

+1

CFLAGS ist eine fest codierte Zeichenfolge in den Makefiles. Ich könnte 'find -name Makefile verwenden. | xargs sed -i 's/-g // g''. Aber warum sollte ich? Alles was ich tun muss, was [devnull] (http://stackoverflow.com/users/2235132/devnull) sagt. Wenn ich 'configure' starte, füge ich CFLAGS = -g0 hinzu und das Problem ist gelöst. – e271p314

Verwandte Themen