我有:
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文件。
更新
在尝试了Ben Voigt的解决方案后,我收到了1个错误:
答案 0 :(得分:1)
创建目标文件的规则缺少-c
选项,对于"仅编译"。所以他们试图链接,并因为没有main()
而失败。
然后,您的all
目标为每个编译单元命名可执行文件。再次,这是错误的,因为他们都没有main()
。您应该只有一个可执行文件。 all
也应该配置为虚假目标,因为它不会构建名为all
的实际文件。
您的所有规则都无法控制输出文件的名称。
您的所有规则都无法通过标记。
您的规则缺少对标头的依赖性,因此编辑标头不会导致重新编译正确的文件。
真的,你应该摆脱编译和链接规则,让make
使用它的内置规则。专注于您的构建目标和依赖关系。
你的结束makefile看起来应该是这样的(当然,使用空格而不是制表符)
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
答案 1 :(得分:0)
狂野猜测:在包含adjacencyList.h之前,你可能会遗漏某个分号。 检查每个头文件并确保使用分号
正确终止每个类定义