Misalnya, ketika saya memasukkan:
gcc -O hello.c -c
Atau
gcc hello.c -c -O
Keduanya tidak mengeluh.
Apakah urutan opsi perintah penting?
sumber
Misalnya, ketika saya memasukkan:
gcc -O hello.c -c
Atau
gcc hello.c -c -O
Keduanya tidak mengeluh.
Apakah urutan opsi perintah penting?
Ini tergantung pada program itu sendiri; sistem operasi tidak menentukan apakah pesanan itu penting atau tidak.
Seperangkat opsi GCC sangat kolosal sehingga saya tidak bisa mengatakan dengan otoritas apa pun jika Anda dapat menyediakan opsi apa pun dalam urutan sewenang-wenang; Anda harus membaca dokumentasi untuk opsi itu. Yang mengatakan, aturan umum adalah bahwa jika Anda memiliki dua atau lebih opsi yang saling eksklusif (seperti -O1 -O2
untuk berbagai tingkat optimasi), program biasanya akan mengambil opsi lebih baru daripada yang sebelumnya. Sekali lagi, ini tidak diberlakukan oleh linux.
Program sederhana yang memungkinkan Anda menentukan sebagian besar opsi dalam urutan apa pun adalah ls
. Daftar semua file dalam direktori saat ini dengan detail dapat dilakukan dengan ls -la
, ls -al
atau ls -l -a
. Namun, ls-l1 (yaitu 'el' 'one') tidak memberikan output yang sama dengan ls -1l ('one' 'l'). Ini adalah opsi yang saling eksklusif, dan yang terakhir terdaftar naik wahana yang pertama diberikan.
Ada juga program aneh yang menerapkan opsi untuk argumen saat mereka tiba. Jadi, misalnya, Anda mungkin memiliki perintah hipotetis blah -a 1 2 -b 3
di mana -a
berlaku untuk semua tiga argumen, tetapi -b
hanya berlaku untuk 3
.
Sekali lagi, ini tergantung pada program individual yang dimaksud. Jika Anda tidak yakin, baca dokumentasinya.
Ada kasus di mana urutan opsi baris perintah penting bahkan di GCC. Jika Anda menautkan dengan pustaka statis (.a), maka jika Anda menentukan -llib1 -llib2
dan ada fungsi liblib2.a
yang memanggil fungsi liblib1.a
yang tidak dimasukkan ke dalam program, maka tautan tersebut akan gagal dengan simbol yang belum terselesaikan. Dengan perpustakaan bersama, ini bukan masalah.
Secara umum, seperti yang dikatakan orang lain, urutan opsi mungkin atau mungkin tidak membuat perbedaan. Namun, output dari dua perintah di bawah ini berbeda - sehingga urutan argumen untuk cat
mengubah output:
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
Perhatikan juga bahwa di Linux (khususnya), GNU getopt()
cenderung untuk menyusun ulang baris perintah sehingga semua opsi (dimulai dengan minus) diproses sebelum argumen lain - kecuali Anda menggunakan tanda hubung ganda --
untuk menandai akhir dari perintah. argumen, atau kecuali Anda mengatur variabel lingkungan POSIXLY_CORRECT.
Hanya jika Anda memiliki 2 opsi yang saling eksklusif. Kalau tidak, pesanan tidak masalah.
Tentu saja, ini dapat bervariasi tergantung pada bagaimana program telah ditulis, tetapi harus berlaku untuk semua alat * nix normal.
Sulit diketahui, seperti yang sudah dikatakan orang lain mungkin ada bedanya (atau tidak).
Aturan praktis yang baik adalah membuka halaman manual dan melihat contoh pertama dan menggunakan urutan itu ketika meletakkan arg di sana.
Jadi jika kita melihat perintah kucing (kucing pria):
SYNOPSIS
cat [OPTION] [FILE]...
Sepertinya selama semua opsi ada sebelum file args Anda harus baik-baik saja.
Dan jika kita melihat binatang 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.
Ini tidak sesederhana itu untuk dipahami sebagai perintah kucing :)
Tetapi jika Anda ingin bermain aman, -c tampaknya datang sebelum -O dan kemudian infile (hello.c) tampaknya menjadi yang terakhir.
gcc -c -O hello.c
Tapi seperti yang Anda sudah tahu, karena yang lain bekerja ... ini bermain sangat aman :)
-static-libstdc++
?