1

我有编译错误。我有一个 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

哪一个是正确的?

4

2 回答 2

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 $@ $<

$+意味着“所有依赖项”(重复;$^也扩展到所有依赖项但唯一),因为您需要链接,而$<仅表示“第一个依赖项”,因为您需要编译。

当你使用它时,在你的编译器命令上撒上大量的警告标志。

于 2012-04-03T22:27:20.820 回答
0

你被告知了什么。应包括包含,而不是作为单独的单元编译。

于 2012-04-03T22:23:18.077 回答