我正在使用Makefile来编译我的cpp文件和头文件。但是我不能完全理解的是编译时-o和-c之间的区别。 我知道-o创建一个目标文件,通常我们写 " g ++ -o compile demo.cpp" 编译demo.cpp程序。 但是在编译包含许多类的程序时,我们为什么要使用它们 " g ++ -c class.cpp" 而不是像我们通常那样。这是一个示例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
答案 0 :(得分:0)
" ...我们为什么要使用
g++ -c class.cpp
..."
从GCC's documentation开始(强调我的):
-c
编译或汇编源文件但不链接。链接阶段根本没有完成。最终输出是每个源文件的目标文件形式 默认情况下,源文件的目标文件名是通过将后缀“.c”,“。i”,“。s”等替换为“.o”来生成的。忽略无法识别的输入文件,不需要编译或汇编。
和
-o 文件
将输出放在文件文件中。这适用于生成的任何类型的输出,无论它是可执行文件,目标文件,汇编程序文件还是预处理的C代码。
如果未指定-o,则缺省情况是将可执行文件放在a.out中,source.so中的source.suffix对象文件,source.s中的汇编程序文件,source.suffix.gch中的预编译头文件。 ,以及标准输出上的所有预处理C源。
-c
用于确保class.o
被编译为目标文件,可以从后来应用的compile
目标规则进行链接。
由于需要的compile
目标是可执行文件,因此使用-o
来确保链接已完成。