C++ C++;makefile多个头一个cpp

C++ C++;makefile多个头一个cpp,c++,C++,我有编译错误。我有一个cpp文件和许多标题。对于makefile,我想我需要列出所有文件头。LinkedBinaryTree.h包含所有其他头文件的include。这就是我写的: all: hw4a hw4a: LinkedBinaryTree.cpp linkedBinaryTree.h booster.h arrayQueue. binaryTree.h binaryTreeNode.h myExceptions.h queue.h g++ -o hw4a Linke

我有编译错误。我有一个cpp文件和许多标题。对于makefile,我想我需要列出所有文件头。LinkedBinaryTree.h包含所有其他头文件的include。这就是我写的:

 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

哪一个是正确的?

告诉你的。应包括include,而不是作为单独的单元进行编译。

后者是正确的:
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 $@ $<
.phony:都是干净的
全部:result.exe
result.exe:main.o
$(CXX)-o$@$+
main.o:main.cpp class1.hpp lib2.hpp
$(CXX)-c-o$@$<
$+
表示“所有依赖项”(重复;
$^
也扩展到所有依赖项,但未限定),这是链接所需的,而
$