Answers:
这取决于程序本身。操作系统不决定顺序是否重要。
GCC的选项集如此之大,以至于我不能与任何权威机构说您能否以任意顺序提供任何选项。您必须阅读该选项的文档。也就是说,一般的经验法则是,如果您有两个或多个相互排斥的选项(例如-O1 -O2
针对不同的优化级别),则程序通常会采用较早的选项。同样,这不是Linux强制执行的。
一个简单的程序可以让您以任意顺序指定大多数选项ls
。清单中的细节当前目录下的所有文件,可与做ls -la
,ls -al
或者ls -l -a
。但是,ls -l1(即'el''one')的输出与ls -1l('one''l')相同。这些是互斥的选项,最后列出的是第一个给出的。
还有一个奇怪的程序,它在参数到达时将选项应用于参数。因此,例如,您可能有一个假设命令blah -a 1 2 -b 3
,该命令-a
适用于所有三个参数,但-b
仅适用于3
。
同样,这取决于所讨论的单个程序。如果不确定,请阅读文档。
在某些情况下,即使在GCC中,命令行选项的顺序也很重要。如果要与静态库(.a)链接,则如果指定-llib1 -llib2
并且其中有一个函数liblib2.a
调用liblib1.a
未带入程序的函数,则链接将失败,并带有未解析的符号。使用共享库,这不是问题。
通常,正如其他人所说,选项的顺序可能会有所不同,也可能没有影响。但是,以下两个命令的输出是不同的-因此cat
更改输出的参数顺序:
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
还要注意,在Linux上(尤其是Linux),GNU getopt()
易于对命令行重新排序,以便所有选项(以减号开头)在其他任何参数之前得到处理-除非您使用双破折号--
来标记命令行结束参数,或者除非您设置环境变量POSIXLY_CORRECT。
很难知道,正如其他人已经告诉过你的那样(或没有)。
一个好的经验法则是打开手册页,看一下第一个示例,并在将arg放入其中时使用该顺序。
因此,如果我们看一下cat命令(man cat):
SYNOPSIS
cat [OPTION] [FILE]...
似乎只要所有选项都在文件args之前,就可以了。
如果我们看一下gcc野兽(man gcc):
SYNOPSIS
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...
Only the most useful options are listed here; see below for the remainder. g++ accepts mostly
the same options as gcc.
要理解为cat命令不是那么简单:)
但是,如果您想安全地使用它,则-c似乎在-O之前,然后infile(hello.c)似乎在最后。
gcc -c -O hello.c
但是,正如您已经知道的那样,既然其他人都在工作……这是非常安全的:)
-static-libstdc++
呢?