我试图了解 gcc 的-o选项是如何工作的,我知道它用于指定输出文件名,但是当我写这样的东西时会发生什么:
gcc main.c -o test0 -o test1
或者
gcc main.c -o test0 -o test1 -o test2
?
我注意到:只考虑最后一个-o <filename>
。所以我的问题是:为什么我可以指定多个-o选项?以及它们如何有用?
我试图了解 gcc 的-o选项是如何工作的,我知道它用于指定输出文件名,但是当我写这样的东西时会发生什么:
gcc main.c -o test0 -o test1
或者
gcc main.c -o test0 -o test1 -o test2
?
我注意到:只考虑最后一个-o <filename>
。所以我的问题是:为什么我可以指定多个-o选项?以及它们如何有用?
您只能有一个输出文件,其路径由-o
选项指定。
这似乎没有记录:
-o
file 将输出放在文件file中。这适用于正在生成的任何类型的输出,无论是可执行文件、目标文件、汇编文件还是预处理的 C 代码。如果
-o
未指定,则默认将可执行文件放在a.out中,将source.suffix的目标文件放在source .o中,将其汇编文件放在source .s中,将预编译的头文件放在source.suffix .gch中,以及标准输出上的所有预处理 C 源代码。
玩弄它,它似乎被视为“全局”选项,只允许指定一个输出文件,其中只有最后一个-o
选项生效(如问题中所述)。
$ 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
现在无效,但希望它能让你了解这样的事情有什么帮助。)