[英]How to create a makefile for several .cpp files with .h files and main.cpp without a .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文件。
更新:
在尝试Ben Voigt的解决方案后,我得到1错误:
您创建目标文件的规则缺少-c
选项,用于“仅编译”。 因此他们正在尝试链接,但由于没有main()
而失败。
然后, all
目标为每个编译单元命名一个可执行文件。 同样,这是错误的,因为它们都没有main()
。 您应该只有一个可执行文件。 all
还应该配置为phony目标,因为它不会构建名为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
大胆的猜测:在包含adjacencyList.h之前,您可能在某个地方缺少分号。 检查每个头文件,并确保每个类定义均以分号正确终止
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.