Respostas:
Isso depende do próprio programa; o sistema operacional não determina se o pedido é ou não importante.
O conjunto de opções do GCC é tão colossal que não posso dizer com nenhuma autoridade se você pode fornecer qualquer opção em ordem arbitrária; você terá que ler a documentação dessa opção. Dito isso, uma regra geral é que, se você tiver duas ou mais opções mutuamente exclusivas (como -O1 -O2
para diferentes níveis de otimização), os programas geralmente terão opções posteriores às anteriores. Novamente, isso não é imposto pelo Linux.
Um programa simples que permite especificar a maioria das opções em qualquer ordem seria ls
. A listagem de todos os arquivos no diretório atual com detalhes pode ser feita com ls -la
, ls -al
ou ls -l -a
. No entanto, ls -l1 (que é 'el' 'one') não fornece a mesma saída que ls -1l ('one' 'l'). Essas são opções mutuamente exclusivas, e as últimas listadas são as primeiras.
Há também o programa ímpar que aplica opções aos argumentos quando eles chegam. Portanto, por exemplo, você pode ter um comando hipotético blah -a 1 2 -b 3
onde -a
se aplica a todos os três argumentos, mas -b
somente a 3
.
Novamente, isso depende do programa individual em questão. Se você não tiver certeza, leia a documentação.
Há casos em que a ordem das opções da linha de comando é importante, mesmo no GCC. Se você estiver vinculando com bibliotecas estáticas (.a), se especificar -llib1 -llib2
e houver uma função liblib2.a
que chame uma função liblib1.a
que não foi trazida para o programa, o link falhará com um símbolo não resolvido. Com bibliotecas compartilhadas, isso não é um problema.
Em geral, como outros disseram, a ordem das opções pode ou não fazer diferença. No entanto, a saída dos dois comandos abaixo é diferente - portanto, a ordem dos argumentos cat
altera a saída:
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
Observe também que no Linux (em particular), o GNU getopt()
pode reordenar a linha de comando para que todas as opções (começando com menos) sejam processadas antes de qualquer outro argumento - a menos que você use traço duplo --
para marcar o final do argumentos, ou a menos que você defina a variável de ambiente POSIXLY_CORRECT.
Somente se você tiver 2 opções que são mutuamente exclusivas. Caso contrário, a ordem não importa.
Obviamente, isso pode variar dependendo de como o programa foi escrito, mas deve se aplicar a todas as ferramentas * nix normais.
Difícil saber, como outros já lhe disseram que pode fazer a diferença (ou não).
Uma boa regra geral é abrir a página de manual, observar o primeiro exemplo e usar essa ordem ao colocar o argumento lá.
Então, se olharmos para o comando cat (man cat):
SYNOPSIS
cat [OPTION] [FILE]...
Parece que, desde que todas as opções estejam antes do arquivo, você deve estar bem.
E se olharmos para a besta 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.
Não é tão simples de entender como o comando cat :)
Mas se você quiser jogar pelo seguro, -c parece vir antes de -O e, em seguida, infile (hello.c) parece ser o último.
gcc -c -O hello.c
Mas como você já sabe, já que os outros funcionam ... isso é muito seguro :)
-static-libstdc++
?