我正在编译错误。我有一个cpp文件和许多标题。对于makefile,我认为我需要列出所有头文件。 LinkedBinaryTree.h包含所有其他头文件的包含。这就是我写的:
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
我被告知O只需要这样做:
g++ LinkedBinaryTree.cpp -o bst.exe
哪一个是正确的?
答案 0 :(得分:2)
后者是正确的:g++ -o result.exe source.cpp
。您必须不在编译器命令中包含头文件,因为它们已经由预处理器自动包含。
当然头文件仍然是依赖,必须在makefile中列出。这就是为什么有一种特殊的通用语法只能引用第一个引用:
.phony: all clean
all: result.exe
result.exe: main.o
$(CXX) -o $@ $+
main.o: main.cpp class1.hpp lib2.hpp
$(CXX) -c -o $@ $<
$+
表示“所有依赖”(重复; $^
也扩展为所有依赖,但未加基),因为您需要链接,而$<
仅表示“第一依赖” ,因为你需要编译。
当你在它的时候,在编译器命令上撒上慷慨的警告标志。
答案 1 :(得分:0)
你被告知了什么。应包括在内的内容,而不是作为单独的单元编译。