2016-11-22 1 views
2

unter meiner Make-Datei ist:Ausgabe einig Zeilenumbrüche durch Makefile

TARGET = prog 
LIBS = -lm 
CC = gcc 
CFLAGS = -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code 

.PHONY: clean all default 

default: $(TARGET) clean 
all: default 

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 
HEADERS = $(wildcard *.h) 

%.o: %.c $(HEADERS) 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

.PRECIOUS: $(TARGET) $(OBJECTS) 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected] 

clean: 
    -rm -f *.o 

mit den Flaggen oben und ein paar Dateien in dem Verzeichnis, macht die Ausgabe es extrem schwierig, Warnungen zu finden:

enter image description here

Wie kann ich neue Anrufe zwischen jedem Anruf an GCC bekommen? Vielleicht die Warnungen bekommen, um etwas mehr herauszustechen?

+0

So etwas wie '@echo Compiling $ <; @ $ (CC) $ (CFLAGS) -c $ <-o $ @; '? – user657267

+0

@ user657267 Bitte melden Sie sich an und machen Sie eine Antwort, damit Sie etwas bekommen können. Das ist die sauberste und einfachste Antwort, die ich bisher gefunden habe, danke. – 8protons

Antwort

1

Sie können den Befehl selbst stummschalten und durch etwas kürzeres ersetzen.

CPPFLAGS := -MMD -MP 
CFLAGS := -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code 
LDLIBS := -lm 

objects := $(patsubst %.c, %.o, $(wildcard *.c)) 
deps := $(objects:.o=.d) 

.PHONY: all clean 

prog: $(objects) 
    $(LINK.o) $^ $(LDLIBS) -o [email protected] 

%.o: %.c 
    @echo Compiling $< 
    @$(COMPILE.c) -o [email protected] $< 

clean: ; $(RM) $(objects) $(deps) 

-include $(deps) 

Ein paar andere Dinge:

  • Bevorzugen := zu =
  • LDLIBS die Standardgröße für Bibliotheken wie in bildeten verwendet Einbau-Rezepte
  • defaults CC-cc machen, die sollte eine Verbindung zu Ihrem Standard-Compiler sein, müssen Sie normalerweise CC
  • nicht festlegen
  • Ihr default Ziel wird parallel brechen baut (-j), würde ich mit ihm
  • Diese Make-Datei keine all Regel braucht, so stellen Sie das Ziel die erste Regel
  • Watch out mit wildcard und Quellen nicht stören, es ist in der Regel sicherer, sie manuell hängen
  • Sie machen jede Objektdatei angeben, sie auf jedem Header, nur verwenden integrierte in depedency Generation statt (-MMD -MP, include)
  • make bereits Rezepte für Objekt Verknüpfung und Zusammenstellung, Wiederverwendung
  • make defaults $(RM) bis rm -f
+0

Eine schnelle Ergänzung: Anstatt "@" vor '' (COMPILE.c) 'zu setzen, können Sie' $ (Q) 'verwenden, wobei' $ (Q) 'normalerweise zu' @ 'aufgelöst wird blank, wenn '$ (V)' auf 1 gesetzt ist. Wenn Sie debuggen, können Sie 'make V = 1' eingeben, um die vollständigen Befehle zu sehen. – user2766918

Verwandte Themen