C++ 如何为带有.h文件的多个.cpp文件和不带.h文件的main.cpp文件创建makefile
我有: 这是我的makefile:C++ 如何为带有.h文件的多个.cpp文件和不带.h文件的main.cpp文件创建makefile,c++,makefile,C++,Makefile,我有: 这是我的makefile: main.cpp distance.cpp distance.h adjacencyList.cpp adjacencyList.h 我得到了这个错误。所以我很确定我对main做了一些错误的事情,因为它不像其他两个类,并且没有.h文件 更新: 在尝试Ben Voigt的解决方案后,我得到一个错误: 胡乱猜测:在包含adjacencyList.h之前,您可能在某处缺少分号。 检查每个头文件并确保每个类定义都以分号正确终止您创建对象文件的规则缺少用于“仅编译
main.cpp
distance.cpp
distance.h
adjacencyList.cpp
adjacencyList.h
我得到了这个错误。所以我很确定我对main做了一些错误的事情,因为它不像其他两个类,并且没有.h文件
更新:
在尝试Ben Voigt的解决方案后,我得到一个错误:
胡乱猜测:在包含adjacencyList.h之前,您可能在某处缺少分号。
检查每个头文件并确保每个类定义都以分号正确终止您创建对象文件的规则缺少用于“仅编译”的
-c
选项。因此,它们尝试链接,但失败了,因为没有main()
然后,您的all
目标为每个编译单元命名一个可执行文件。同样,这是错误的,因为它们并不都具有main()
。您应该只有一个可执行文件all
也应配置为虚假目标,因为它不会生成名为all
的实际文件
您的所有规则都无法控制输出文件的名称
您的所有规则都无法通过标志
您的规则缺少对标题的依赖关系,因此编辑标题不会导致重新编译正确的文件
实际上,您应该摆脱编译和链接规则,让make
使用它的内置规则。关注您的构建目标和依赖项
您的最终生成文件应该如下所示(当然,使用空格而不是制表符)
检查:我的包括都像第3-4行了。所以没有分号丢失。很好,本。我没有注意到that@elephant,您的make文件中是否缺少一些-c(例如,对于distance.o,g++-c distance.cpp)?不,我使用的是-lstdc++而不是-c。您可以在我的问题中查看我的make文件。以下命令有效吗?g++distance.cpp adjacencyList.cpp main.cpp-lstdc++否,我得到一堆警告,然后我得到3个错误:main.cpp:27:error asystema未在此范围main中声明。cpp:70:error:aatoia未在此范围中声明scope@Elephant:然后您需要将
#include
添加到main.cpp,然后,它是否工作?另外,您最终希望从atoi()
切换到strtol()
。。。错误处理更好。我仍然收到一些警告和1个错误(.text+0x20):对“main”换行符的未定义引用:collect2:ld返回1“退出状态谢谢,我将查看这些要点。因为我只看了几个小时的make文件,所以我基本上是想让一个简单的make文件用于家庭作业。我尝试了你的解决方案,但仍然遇到一个我正在尝试解决的错误。如果你有时间看的话,这是我最新的问题。谢谢
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
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