2016-08-01 4 views
2

Ich habe verschiedene Makefiles gesehen, wo sie die .SUFFIXES Regel verwenden. die sich nach meinem Verständnis bedeutet, ein einfaches BeispielNicht in der Lage, die Verwendung von. Suffixes Regel in Makefile Ubuntu zu verstehen

Schritt 1 unter:

.SUFFIXES: .o .c .cpp .cc .cxx .C 

#where $< indicates the source file and [email protected] represents the target file. 
.cpp.o: 
     $(CXX) -c $(INCPATH) -o "[email protected]" "$<" 

es wird die Zieldatei auf eine .o Datei mit der Quelle mit CXX Compiler kompiliert werden.

Aber danach habe ich auch einige andere Befehle wie

schritt2 siehe:

all: Makefile $(TARGET) 

Schritt 3:

someobjectfile.o: dependencies 

Wenn wir also mein Ziel verwenden können .SUFFIXES Regel zu kompilieren, warum dann Step3 verwenden. Ich entschuldige mich, wenn es eine dumme Frage ist.

Antwort

1

ich mit dem Hinweis beginnen, werden feststellen, dass Suffixregeln obsolete in GNU make

Suffixregeln sind die altmodische Art und Weise der Definition impliziten Regeln für make sind. Suffixregeln sind obsolet, weil Musterregeln allgemeiner und klarer sind. Sie werden in GNU make zur Kompatibilität mit alten Makefiles unterstützt.

(Obwohl für Legacy-Gründen .SUFFIXES steuert noch die integrierten Regeln zur Verfügung stehen.)

das gesagt ist, nur weil Sie gesagt haben, dass .o Dateien können aus Quellen mit bestimmten Endungen kompiliert werden tut bedeutet nicht, dass es keine andere Abhängigkeiten über die einzelnen Quelldatei sind, ist die folgende sehr häufig zum Beispiel

someobjectfile.o: someheader.h someotherheader.h 
1

.SUFFIXES Kontrollen suffix rules:

Suffixregeln sind die altmodische Art, implizite Regeln für make zu definieren. Suffixregeln sind obsolet, weil Musterregeln allgemeiner und klarer sind. Sie werden in GNU make unterstützt, um Kompatibilität mit alten Makefiles zu gewährleisten.

%.o : %.cpp 

someobjectfile.o: dependencies 

Die oben fügt Abhängigkeiten von someobjectfile.o unabhängig davon, wie .o gemacht:

Mit anderen Worten, können Sie .SUFFIXES und schreiben Sie Ihre Muster Regel als ignorieren.