【问题标题】:How gcc multiple -o option works?gcc 多个 -o 选项如何工作?
【发布时间】:2015-01-25 14:55:53
【问题描述】:

我试图了解 gcc 的 -o 选项是如何工作的,我知道它是用来指定输出文件名的,但是当我写这样的东西时会发生什么:

gcc main.c -o test0 -o test1

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

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

【问题讨论】:

    标签: c gcc compiler-options


    【解决方案1】:

    这好像不是documented

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

    如果没有指定-o,则默认在a.out中放置一个可执行文件,source中source.suffix的目标文件.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 现在是无效的,但希望它可以让您了解像这样的东西可能有什么帮助。)

    【讨论】:

    • 非常感谢,您的示例正是我正在寻找的。​​span>
    【解决方案2】:

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

    【讨论】:

    • 所以只考虑最后一个 -o 而其他的都被丢弃了?
    • @LolloFake 我看到你没有接受的答案,恐怕是因为你不知道,阅读this
    • @LolloFake 显然现在你必须选择 mafso 的答案,它非常详细。
    • 我认为这是高声誉用户的选择,感谢您提供的信息。
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多