C++ 如何编译头文件、实现文件、驱动程序文件

C++ 如何编译头文件、实现文件、驱动程序文件,c++,compilation,C++,Compilation,我有三个文件:movie.h(头文件)movie.cpp(实现文件)lab9.cpp(使用电影类的驱动程序文件) 我收到了关于如何生成makefile以编译上述文件的示例: 但是,我仍然难以理解这里的概念(我甚至不知道在哪里填写文件名,因为示例文件名让我感到困惑(例如:main.o应该在这里代表什么?) 有人能帮我弄明白这一点吗(一个有解释的解决方案),这样它就可以生成一个名为lab9的可执行文件 编辑:我的makefile中有以下内容: linkAndRun: lab9.o movie.o

我有三个文件:
movie.h
(头文件)<代码>movie.cpp(实现文件)
lab9.cpp
(使用电影类的驱动程序文件)

我收到了关于如何生成makefile以编译上述文件的示例:

但是,我仍然难以理解这里的概念(我甚至不知道在哪里填写文件名,因为示例文件名让我感到困惑(例如:main.o应该在这里代表什么?)

有人能帮我弄明白这一点吗(一个有解释的解决方案),这样它就可以生成一个名为
lab9
的可执行文件

编辑:我的makefile中有以下内容:

linkAndRun: lab9.o movie.o
        g++ movie.o lab9.o -o lab9

movie.o: movie.cpp movie.h
        g++ -c movie.cpp -o movie.o

lab9.o: lab9.cpp
        g++ -c lab9.cpp -o lab9.o
我遇到了几个编译错误,但编译本身似乎成功了。这是正确的吗?到目前为止提供的两个答案都有差异,所以我结合了我认为正确的东西。因此,确认会有所帮助。

尝试以下方法:

(此步骤将对象文件链接在一起并生成可执行文件)

(此步骤将movie.cpp编译为对象文件)

(此步骤将lab9.cpp编译为对象文件)

我只是将您的文件替换到示例中,不包括头文件

(此步骤将对象文件链接在一起并生成可执行文件)

(此步骤将movie.cpp编译为对象文件)

(此步骤将lab9.cpp编译为对象文件)


我只是将您的文件替换到示例中,不包括头文件-

executeThis: lab9.o movie.o 
    g++ lab9.o movie.o -o lab9

lab9.o: lab9.cpp
    g++ -c lab9.cpp -o lab.o

movie.o: movie.cpp movie.h
    g++ -c movie.cpp -o movie.o

这是你要找的-

executeThis: lab9.o movie.o 
    g++ lab9.o movie.o -o lab9

lab9.o: lab9.cpp
    g++ -c lab9.cpp -o lab.o

movie.o: movie.cpp movie.h
    g++ -c movie.cpp -o movie.o

呃,以您的文件名替换示例中的文件名。完成。这些文件中是否有
main()
的定义?@BrianRoach我理解你的想法,你完全有权就一个可能相当愚蠢的问题向我发问,但不管怎样……我很困惑。特别是,我没有使用subfile1和subfile2编译语句。似乎不需要其中一个。好吧,你只有2个文件要编译,而不是3个,所以是的,你不会有3个。如果构建成功,你不会有错误,而是警告。它们不是致命的,但可以告诉你可能出错的事情,并可能在将来造成麻烦。尝试修复警告总是一个好主意。呃,以您的文件名替换示例中的文件名。完成。这些文件中是否有
main()
的定义?@BrianRoach我理解你的想法,你完全有权就一个可能相当愚蠢的问题向我发问,但不管怎样……我很困惑。特别是,我没有使用subfile1和subfile2编译语句。似乎不需要其中一个。好吧,你只有2个文件要编译,而不是3个,所以是的,你不会有3个。如果构建成功,你不会有错误,而是警告。它们不是致命的,但可以告诉你可能出错的事情,并可能在将来造成麻烦。尝试修复警告总是一个好主意。第一个变量名(linkAndRun)的作用是什么?这似乎与它是什么无关,但我对它的目的感兴趣。另外,我假设
lab9
可以替换
run
,对吗?否则,这有助于解释问题。它证实了我的怀疑,即示例中有太多的compile语句。这个例子使用了三个cpp文件,你只有两个。这就是为什么这个数字是“关”的原因。第一部分的名称没有任何意义,它可以是您想要的任何内容。类似地,run可以被您想要的任何内容替换。第二个compile语句不需要在
movie.cpp
之后添加
movie.h
?另外,linkAndRun:应该包含两个以前编译过的文件,对吗?这不是我最近编辑的lab9.o和movie.o吗?第一个变量名(linkAndRun)的用途是什么?这似乎与它是什么无关,但我对它的目的感兴趣。另外,我假设
lab9
可以替换
run
,对吗?否则,这有助于解释问题。它证实了我的怀疑,即示例中有太多的compile语句。这个例子使用了三个cpp文件,你只有两个。这就是为什么这个数字是“关”的原因。第一部分的名称没有任何意义,它可以是您想要的任何内容。类似地,run可以被您想要的任何内容替换。第二个compile语句不需要在
movie.cpp
之后添加
movie.h
?另外,linkAndRun:应该包含两个以前编译过的文件,对吗?那不是我最近编辑的lab9.o和movie.o吗?
lab9.o: lab9.cpp
   g++ -c lab9.cpp -o lab9.o
executeThis: lab9.o movie.o 
    g++ lab9.o movie.o -o lab9

lab9.o: lab9.cpp
    g++ -c lab9.cpp -o lab.o

movie.o: movie.cpp movie.h
    g++ -c movie.cpp -o movie.o