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

时间:2015-09-29 17:00:47

标签: c++ gcc makefile

我正在使用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

1 个答案:

答案 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来确保链接已完成。