Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为带有.h文件的多个.cpp文件和不带.h文件的main.cpp文件创建makefile_C++_Makefile - Fatal编程技术网

C++ 如何为带有.h文件的多个.cpp文件和不带.h文件的main.cpp文件创建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之前,您可能在某处缺少分号。 检查每个头文件并确保每个类定义都以分号正确终止您创建对象文件的规则缺少用于“仅编译

我有:

这是我的makefile:

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