gcc '-c' 和 gcc '-o' 是什么意思?

What's the meaning of gcc '-c' and gcc '-o'?

我创建makefile的时候写的

test: main.o 1.o
  gcc -o test main.o 1.o

main.o: main.c a.h
  gcc -c main.c

1.o: 1.c a.h
  gcc -c 1.c

但我不明白为什么我在第一行使用-o 而在第二、第三行使用-c。 它们有什么区别??

这些选项的作用截然不同:

  • -c 告诉 GCC 将源文件编译成 .o 目标文件。如果没有该选项,它将默认编译 并将代码链接 为一个完整的可执行程序,只有在您同时提供所有 .c 文件时才有效。要单独编译文件以便稍后链接它们,您需要 -c.
  • -o 设置 GCC 生成的输出文件的名称。您在链接目标文件以制作完整程序时使用它,默认输出文件名是 a.out。如果您不希望您的程序被称为 a.out,您可以使用 -o 指定一个不同的名称。