Ich möchte mit GCC-Gesamtprogrammoptimierungen experimentieren. Dazu muss ich alle C-Dateien auf einmal an das Compiler-Frontend übergeben. Allerdings verwende ich Makefiles, um meinen Build-Prozess zu automatisieren, und ich bin kein Experte, wenn es um Makefile-Magie geht.
Wie soll ich das Makefile ändern, wenn ich mit nur einem Aufruf von GCC kompilieren (vielleicht sogar verlinken) möchte?
LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall
# Should be equivalent to your list of C files, if you don't build selectively
SRC=$(wildcard *.c)
test: $(SRC)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
Warum sollte es die tatsächliche Liste der C-Dateien sein, anstatt Platzhalter?
– Nornagon
28. Juni 2011 um 2:00 Uhr
@nornagon, s/sollte/sollte gleichwertig sein mit/
– Alex B
28. Juni 2011 um 2:02 Uhr
@AlexB Sprich Englisch. Was bedeutet das überhaupt?
– Übersicht
13. Juli 2012 um 22:39 Uhr
@Overv es ist sed Syntax, d. h. „sollte sein“ durch „sollte äquivalent sein“ ersetzen
– kirb
19. Juli 2012 um 8:00 Uhr
Dieses Makefile wird unter stackoverflow.com/questions/3932895/makefile-aliases/… erklärt.
Dies scheint mir eigentlich keine Antwort auf die ursprüngliche Frage zu sein, da es wahrscheinlich viele Anrufe dazu gibt ${CC}. Das heißt, es war im Wesentlichen das, was ich für das wollte, was ich zu tun versuchte. (Ich hatte eine Konvertierung, die ich mit einer Reihe von Textdateien durchführen wollte, also habe ich meine eigene hinzugefügt .SUFFIXES Linie und so, aber die $(wildcard) und die $(VARIABLE:.ext1=.ext2) Conversion waren genau das, wonach ich gesucht habe.) Ich habe ausdrücklich weder nach oben noch nach unten gestimmt, obwohl ich sagen würde, dass dies eine Ablehnung verdient für diese Frage.
– Linde
30. April 2015 um 21:26 Uhr
Sie müssen Ihre Suffix-Regel (%.o: %.c) zugunsten einer Big-Bang-Regel herausnehmen. Etwas wie das:
Wenn Sie mit der Optimierung des gesamten Programms von GCC experimentieren, stellen Sie sicher, dass Sie das entsprechende Flag zu CFLAGS oben hinzufügen.
Beim Durchlesen der Dokumentation für diese Flags sehe ich auch Hinweise zur Linkzeitoptimierung; die solltest du auch untersuchen.
14143000cookie-checkmakefiles – alle c-Dateien auf einmal kompilierenyes