gcc multiple -o 选项如何工作?
How gcc multiple -o option works?
我想了解 gcc 的 -o 选项是如何工作的,我知道它用于指定输出文件名,但是当我写类似的东西时会发生什么这个:
gcc main.c -o test0 -o test1
或
gcc main.c -o test0 -o test1 -o test2
?
我注意到:只有最后一个 -o <filename>
被考虑在内。
所以我的问题是:为什么我可以指定多个 -o 选项?以及它们如何发挥作用?
您只能有一个输出文件,其路径由 -o
选项指定。
这好像不是documented:
-o
file
Place output in file file. This applies to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code.
If -o
is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output.
玩弄它,它似乎被视为一个 "global" 选项,只允许指定一个输出文件,其中只有最后一个 -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
现在无效,但希望它能说明这样的 可能 有什么帮助。)
我想了解 gcc 的 -o 选项是如何工作的,我知道它用于指定输出文件名,但是当我写类似的东西时会发生什么这个:
gcc main.c -o test0 -o test1
或
gcc main.c -o test0 -o test1 -o test2
?
我注意到:只有最后一个 -o <filename>
被考虑在内。
所以我的问题是:为什么我可以指定多个 -o 选项?以及它们如何发挥作用?
您只能有一个输出文件,其路径由 -o
选项指定。
这好像不是documented:
-o
file Place output in file file. This applies to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code.If
-o
is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output.
玩弄它,它似乎被视为一个 "global" 选项,只允许指定一个输出文件,其中只有最后一个 -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
现在无效,但希望它能说明这样的 可能 有什么帮助。)