2016-07-21 7 views
-1

Ich führe derzeit make -j20 TGT=stuff, die Hunderte von Flags aus einem Makefile, die ich nicht bearbeiten kann.Wie kann ich Flags in meinem Makefile überschreiben, indem ich den make-Befehl ändere

Ich möchte die Optimierung -O3 zu -O0 zum Debuggen zu entfernen. Kann ich übergehen, was in Makefile ist, indem ich den make -j20 ... Befehl ändere?

EDIT: Ich benutze g ++

+0

Dies hängt davon ab, wie das Makefile geschrieben wird. Kannst du relevante Auszüge aus dem Makefile posten? – juppman

+0

leider nicht, aber ich kann sagen, was 'CPPFLAGS' auf – statquant

+1

festgelegt ist Nach https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html die" letzte solche Option ist die, die wirksam ist "(in Bezug auf O-Flags). Wenn Sie also eine Möglichkeit finden, -O0 zu einer Variablen hinzuzufügen, die später im Befehl als das -O3-Flag hinzugefügt wird, sollte es funktionieren. Das ist, wenn Sie gcc ... verwenden – juppman

Antwort

2

Die Antwort auf Ihre Frage nach der Regel ab, die für die Erstellung der C++ Dateien verwendet wird. Da Sie Ihr Makefile nicht freigeben möchten, erkläre ich dies mit der impliziten Standardregel für C++ - Programme.

können Sie außer Kraft setzen jede Variable machen, sagen 'MY_VAR' durch wie diese machen Aufruf: make MY_VAR = 'Hallo'

Das Standardrezept für die Erstellung C++ ähnlich sieht so aus:

%.o : %.cpp 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o [email protected] 

CPPFLAGS sind per Konvention die an den C- und C++ - Präprozessor übergebenen Flags, CXXFLAGS sind für die C++ - Kompilierung relevant.

Also nehme ich an Sie setzt CXXFLAGS Makefile können wie folgt sagen:

CXXFLAGS = -O3 

Sie es wollen -O0 sein, Sie können so CXXFLAGS außer Kraft setzen.

Anruf wie folgt aus:

make -j20 TGT=stuff CXXFLAGS='-O0' 

Da Sie Sie debuggen möchten wahrscheinlich verwenden sollten:

make -j20 TGT=stuff CXXFLAGS='-O0 -g' 

Wenn die Standardeinstellung für CXXFLAGS von Ihrem Make-Datei andere wichtige Flags enthält würden Sie angeben müssen auch diese - Sie überschreiben ihren Wert. auch

Siehe: https://www.gnu.org/software/make/manual/html_node/Overriding.html

Das Make Handbuch wirklich gut ist, kann ich nur empfehlen, einen Blick.