2012-04-03 15 views
1

Ich habe Kompilierungsfehler. Ich habe eine cpp-Datei und viele Header. Für das Makefile dachte ich, ich müsste alle Header-Dateien auflisten. Die LinkedBinaryTree.h enthält enthält für alle anderen Header-Dateien. Das, was ich schrieb:C++ Makefile mehrere Header eine cpp

all: hw4a 

hw4a: LinkedBinaryTree.cpp linkedBinaryTree.h booster.h arrayQueue. binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 
g++ -o hw4a LinkedBinaryTree.cpp LinkedBinaryTree.h booster.h arrayQueue.h binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 

clean: 
rm hw4a 

Mir wurde gesagt, dass O nur tun musste:

ein
g++ LinkedBinaryTree.cpp -o bst.exe 

Welche ist richtig?

Antwort

0

Was Ihnen gesagt wurde. Includes sollten enthalten sein und nicht als separate Einheiten kompiliert werden.

2

Letzteres ist korrekt: g++ -o result.exe source.cpp. Sie müssen nicht enthalten Header-Dateien in den Compiler-Befehl, da sie automatisch durch den Präprozessor bereits enthalten sind.

Natürlich sind die Header-Dateien immer noch Abhängigkeiten und müssen im Makefile aufgeführt werden. Aus diesem Grund gibt es eine spezielle Universal-Syntax zum ersten Bezug auf beziehen sich nur:

.phony: all clean 

all: result.exe 

result.exe: main.o 
    $(CXX) -o [email protected] $+ 

main.o: main.cpp class1.hpp lib2.hpp 
    $(CXX) -c -o [email protected] $< 

Die $+ bedeutet „alle dependecies“ (mit Wiederholung; $^ erweitert auch für alle Abhängigkeiten aber uniquified), wie Sie benötigen für Verknüpfen, während $< bedeutet nur "erste Abhängigkeit", wie Sie zum Übersetzen benötigen.

Während Sie gerade dabei sind, streuen Sie großzügige Warnflaggen über Ihre Compilerbefehle.

Verwandte Themen