2014-10-10 132 views
0

我:如何创建与.h文件和几个main.cpp的.cpp文件生成文件没有.H

main.cpp 
distance.cpp 
distance.h 
adjacencyList.cpp 
adjacencyList.h 

这里是我的makefile:

all: distance main adjacencyList 
    g++ distance.o main.o adjacencyList.o 

main.o: main.cpp 
    g++ main.cpp -lstdc++ 

adjacencyList.o: adjacencyList.cpp 
    g++ adjacencyList.cpp -lstdc++ 

distance.o: distance.cpp 
    g++ distance.cpp -lstdc++ 

clean: 
    rm -rf *.o all 

我得到这个错误。所以我很确定我在main中做了一些错误,因为它不是像其他两个类一样的类,也没有.h文件。

enter image description here

更新:

努力奔福格特的解决方案后,我得到1个错误:

enter image description here

+0

执行以下命令? g ++ distance.cpp adjacencyList.cpp main.cpp -lstdC++ – nrcrast 2014-10-10 05:21:59

+0

不,我得到一堆警告,然后我得到3个错误:main.cpp:27:错误asystema未在此范围内声明main.cpp:70:错误:aatoia没有在这个范围内声明 – Elephant 2014-10-10 05:27:15

+0

@Elephant:那么你需要添加'#include '到main.cpp那么,它是否工作? – 2014-10-10 05:30:11

回答

1

对于“仅编译”,您的创建目标文件的规则缺少-c选项。所以他们试图链接,并且因为没有main()而失败。

然后,您的all目标为每个编译单元命名一个可执行文件。再次,这是错误的,因为他们并不都有main()。你应该只有一个可执行文件。 all也应该配置为虚假目标,因为它不会构建名为all的实际文件。

您的所有规则都无法控制输出文件的名称。

您的所有规则都无法通过标志。

您的规则缺少头文件的依赖关系,因此编辑头文件不会导致正确的文件被重新编译。

真的,你应该摆脱编译和链接规则,并让make使用其内置的。关注你的构建目标和依赖关系。

您的最终生成文件应该是这个样子(当然,使用空格而不是制表符)

all : main 

.PHONY : all clean 

CC = g++ 
LD = g++ 

main : main.o adjacencyList.o distance.o 

main.o: main.cpp adjacencyList.h distance.h 

adjacencyList.o: adjacencyList.cpp adjacencyList.h 

distance.o: distance.cpp distance.h 

clean: 
    rm -rf *.o main 
+0

谢谢,我会查看这些要点。由于我只看过make文件几个小时,所以我基本上试图获得一个简单的makefile来完成作业。 – Elephant 2014-10-10 05:43:01

+0

我试过你的解决方案,我仍然遇到了一个我正试图解决的错误。如果您有时间查看,那是我最新的问题。谢谢。 – Elephant 2014-10-10 05:57:30

0

大胆猜测:有可能你缺少一个分号在包含adjacencyList.h之前的某个地方。 检查每个头文件并确保每个类定义都用分号正确终止

+0

检查:我的包括都像3 - 4线下来。所以没有分号丢失。 – Elephant 2014-10-10 05:19:38

+0

@Damien:他没有编译错误。 – 2014-10-10 05:26:00

+0

好赶本。我没有注意到那 – 2014-10-10 05:27:16