Risposte:
Questo dipende dal programma stesso; il sistema operativo non determina se l'ordine è importante.
L'insieme di opzioni di GCC è così colossale che non posso dire con alcuna autorità se è possibile fornire qualsiasi opzione in ordine arbitrario; dovrai leggere la documentazione per quell'opzione. Detto questo, una regola empirica generale è che se si hanno due o più opzioni reciprocamente esclusive (come -O1 -O2
per i diversi livelli di ottimizzazione), i programmi generalmente prenderanno opzioni successive rispetto a quelle precedenti. Ancora una volta, questo non è applicato da Linux.
Un semplice programma che ti consente di specificare la maggior parte delle opzioni in qualsiasi ordine sarebbe ls
. Elencare tutti i file nella directory corrente con i dettagli può essere fatto con ls -la
, ls -al
o ls -l -a
. Tuttavia, ls -l1 (ovvero 'el' 'one') non fornisce lo stesso output di ls -1l ('one' 'l'). Queste sono opzioni che si escludono a vicenda, e l'ultima elencata sopra cavalca la prima data.
C'è anche il programma dispari che applica opzioni agli argomenti man mano che arrivano. Quindi, ad esempio, potresti avere un comando ipotetico in blah -a 1 2 -b 3
cui si -a
applica a tutti e tre gli argomenti, ma -b
si applica solo a 3
.
Ancora una volta, questo dipende dal singolo programma in questione. Se non sei sicuro, leggi la documentazione.
Ci sono casi in cui l'ordine delle opzioni della riga di comando è importante anche in GCC. Se si sta effettuando il collegamento con librerie statiche (.a), se si specifica -llib1 -llib2
e c'è una funzione liblib2.a
che chiama una funzione liblib1.a
che non è stata portata nel programma, il collegamento fallirà con un simbolo non risolto. Con le librerie condivise, questo non è un problema.
In generale, come altri hanno affermato, l'ordine delle opzioni può o meno fare la differenza. Tuttavia, l'output dei due comandi seguenti è diverso, quindi l'ordine degli argomenti per cat
alterare l'output:
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
Si noti inoltre che su Linux (in particolare), GNU getopt()
è in grado di riordinare la riga di comando in modo che tutte le opzioni (che iniziano con un --
segno meno) siano elaborate prima di uno qualsiasi degli altri argomenti, a meno che non si usi il doppio trattino per segnare la fine del argomenti o se non si imposta la variabile di ambiente POSIXLY_CORRECT.
Solo se hai 2 opzioni che si escludono a vicenda. Altrimenti, l'ordine non ha importanza.
Naturalmente, questo può variare a seconda di come è stato scritto il programma, ma dovrebbe applicarsi a tutti gli strumenti * nix normali.
Difficile da sapere, come altri ti hanno già detto che potrebbe fare la differenza (o no).
Una buona regola empirica è aprire la pagina man e guardare il primo esempio e usare quell'ordine quando si inserisce arg.
Quindi, se guardiamo il comando cat (man cat):
SYNOPSIS
cat [OPTION] [FILE]...
Sembra che fino a quando tutte le opzioni sono prima che il file sostenga che dovresti andare bene.
E se guardiamo la bestia 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.
Non è così semplice da capire come il comando cat :)
Ma se vuoi giocarci sul sicuro, -c sembra venire prima di -O e quindi infile (hello.c) sembra essere l'ultimo.
gcc -c -O hello.c
Ma come già sapete, dal momento che gli altri lavorano ... questo è molto sicuro :)
-static-libstdc++
?