如何编译头文件、实现文件、驱动文件

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吗?

以上是关于如何编译头文件、实现文件、驱动文件的主要内容,如果未能解决你的问题,请参考以下文章

在linux设备驱动中我们使用到的头文件指的是啥?

[第一节] WSL2 内核编译/安装内核头文件/驱动调试

[第一节] WSL2 内核编译/安装内核头文件/驱动调试

[第一节] WSL2 内核编译/安装内核头文件/驱动调试

如何在Linux上安装内核头文件

头文件在编译中的作用?