什么时候应该在Makefile中使用-c或-o GCC选项?

When should -c or -o GCC options be used in a Makefile?

本文关键字:GCC 选项 Makefile 什么时候      更新时间:2023-10-16

我正在使用Makefile来编译我的cpp文件和头文件。但是我不完全理解的是编译时-o和-c之间的区别。我知道- 0会创建一个目标文件,通常我们会写g++ -o compile demo.cpp编译一个程序demo.cpp。但是当编译一个有很多类的程序时,为什么要使用"g++ -c class.cpp"而不是像我们通常做的- 0。下面是一个示例Makefile。非常感谢你的帮助!

all:compile
compile: demo.cpp class.o
    g++ -o compile demo.cpp class.o
class.o: class.h class.cpp
    g++ -c class.cpp

"…为什么我们要用g++ -c class.cpp…"

来自GCC的文档(强调我的):

- c
编译或组装源文件,但不要链接。链接阶段还没有完成。最终的输出是每个源文件的目标文件的形式。
默认情况下,源文件的目标文件名是通过替换后缀' .c ', '来生成的。我','。S '等,用'。o '。

不需要编译或汇编的无法识别的输入文件将被忽略。

文件em>
将输出放在文件文件中。这适用于产生的任何类型的输出,无论是可执行文件,目标文件,汇编文件还是预处理的C代码。如果未指定-o,则默认将可执行文件放入a.o out中,即source的目标文件。source中的后缀。它的汇编文件在源代码中。S,在source.suffix中预编译的头文件。gch,以及标准输出上的所有预处理C源代码。

-c用于确保class.o被编译为一个目标文件,该文件可以从compile目标的后续应用规则中链接。

由于所需的compile目标是一个可执行文件,因此使用-o来确保链接完成。