如何编译头文件、实现文件、驱动文件
Posted
技术标签:
【中文标题】如何编译头文件、实现文件、驱动文件【英文标题】:How to compile header, implementation, driver files 【发布时间】:2012-03-22 03:06:21 【问题描述】:我有三个文件:movie.h
(标题); movie.cpp
(实现文件); lab9.cpp
(使用电影类的驱动文件)
我收到了这个关于如何生成 makefile 来编译上述文件的示例:
http://sci.tamucc.edu/~ptedford/1436Spr12/1436CommonFiles/MakeFileExample.txt
但是,我仍然无法理解这里的概念(我什至不知道在哪里填写我的文件名,因为示例文件名让我感到困惑(例如: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
我遇到了几个编译错误,但编译本身似乎是成功的。它是否正确?到目前为止提供的两个答案都有差异,所以我结合了我觉得是正确的东西。所以确认会有所帮助。
【问题讨论】:
Erm,取你的文件名,替换示例中的文件名。完成。 其中一个文件中是否包含main()
的定义?
@BrianRoach 我理解你的心态,你完全有权就这个可能很愚蠢的问题叫我出来,但无论如何......我很困惑。特别是我没有使用 subfile1 和 subfile2 编译语句。似乎不需要其中之一。
好吧,你只有 2 个文件要编译,而不是 3 个,所以是的,你不会有 3 个。
如果构建成功,您遇到的不是错误,而是警告。它们不是致命的,但可以告诉您可能错误并可能在未来引起麻烦的事情。尝试修复警告总是一个好主意。
【参考方案1】:
这就是你要找的东西-
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
【讨论】:
【参考方案2】:试试这个:
(此步骤将目标文件链接在一起并生成您的可执行文件)
linkAndRun: movie.o lab9.o
g++ movie.o lab9.o -o run
(此步骤将movie.cpp编译为目标文件)
movie.o: movie.cpp
g++ -c movie.cpp -o movie.o
(此步骤将lab9.cpp编译为目标文件)
lab9.o: lab9.cpp
g++ -c lab9.cpp -o lab9.o
我只是将您的文件替换到示例中,不包括头文件
【讨论】:
第一个变量名 (linkAndRun) 有什么作用?似乎它是什么并不重要,但我对目的很感兴趣。另外,我假设lab9
可以替换run
,对吗?否则,这有助于解释事情。它证实了我的怀疑,即示例中的编译语句过多。这就是让我失望的原因。
这个例子使用了三个cpp文件,你只有两个。这就是数字“关闭”的原因。第一部分的名称没有任何意义,它可以是任何你想要的。同样,run 可以替换为任何你想要的。
第二个编译语句在movie.cpp
之后不是需要movie.h
吗?另外,linkAndRun: 应该包含之前编译的两个文件,对吧?这不就是我最近编辑的lab9.o和movie.o吗?以上是关于如何编译头文件、实现文件、驱动文件的主要内容,如果未能解决你的问题,请参考以下文章