gcc multiple -o选项如何工作?

时间:2015-01-25 14:55:54

标签: c gcc compiler-options

我正在尝试理解gcc的 -o 选项如何工作,我知道它用于指定输出文件名,但是当我写这样的内容时会发生什么:

gcc main.c -o test0 -o test1

gcc main.c -o test0 -o test1 -o test2


我注意到:只考虑最后一个-o <filename>。 所以我的问题是:为什么我可以指定多个 -o 选项?以及它们如何有用?

2 个答案:

答案 0 :(得分:3)

您只能有一个输出文件,其路径使用-o选项指定。

答案 1 :(得分:3)

这似乎不是documented

  

-o 文件   将输出放在文件文件中。这适用于生成的任何类型的输出,无论是可执行文件,目标文件,汇编程序文件还是预处理的C代码。

     

如果未指定-o,则默认设置是将可执行文件放在 a.out 中, source.suffix 的目标文件放在 .o source .s 中的汇编程序文件, source.suffix <中的预编译头文件/ em> .gch ,以及标准输出上的所有预处理C源。

使用它,它似乎被视为“全局”选项,只允许指定一个输出文件,其中只有最后一个-o选项生效(如问题中所述)。< / p>

$ gcc -c foo.c -o fooX.o bar.c -o barX.o
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.

$ gcc -c foo.c -o fooX.o -o fooY.o # produces fooY.o only

如果前一个选项与许多命令行工具相同,则覆盖以前的选项,这在编写脚本时有时很有用。作为一个(可能不太好)的例子,考虑

alias gcc='gcc -o my_default' # a.out is a bad default name
.bashrc 中的

;你仍然可以输入

gcc -o foo foo.c

没有收到错误。 (这个例子很糟糕,因为gcc -c foo.c bar.c现在无效,但希望它可以让我知道这个之类的东西可以有用。)