जवाबों:
यह कार्यक्रम पर ही निर्भर करता है; ऑपरेटिंग सिस्टम मामलों को क्रमबद्ध करता है या नहीं।
जीसीसी के विकल्पों का सेट इतना बड़ा है कि मैं किसी भी प्राधिकरण के साथ नहीं कह सकता हूं यदि आप किसी भी विकल्प को मनमाने तरीके से आपूर्ति कर सकते हैं ; आपको उस विकल्प के लिए प्रलेखन पढ़ना होगा। उस ने कहा, अंगूठे का एक सामान्य नियम यह है कि यदि आपके पास दो या अधिक पारस्परिक रूप से अनन्य विकल्प हैं (जैसे कि -O1 -O2
अनुकूलन के विभिन्न स्तरों के लिए), तो कार्यक्रम आम तौर पर पहले वाले लोगों के बाद के विकल्प लेंगे। फिर, यह लिनक्स द्वारा लागू नहीं किया गया है।
एक सरल प्रोग्राम जो आपको किसी भी क्रम में अधिकांश विकल्प निर्दिष्ट करने देता है 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
।
फिर, यह प्रश्न में व्यक्तिगत कार्यक्रम पर निर्भर है। यदि आप कभी अनिश्चित हैं, तो दस्तावेज़ीकरण पढ़ें।
ऐसे मामले हैं जहां जीसीसी में भी कमांड लाइन विकल्प का क्रम मायने रखता है। यदि आप स्थैतिक पुस्तकालयों (.A) के साथ लिंक कर रहे हैं, तो यदि आप निर्दिष्ट करते हैं -llib1 -llib2
और इसमें एक फ़ंक्शन होता है, तो liblib2.a
उस फ़ंक्शन को कॉल liblib1.a
किया जाता है, जिसे प्रोग्राम में नहीं लाया गया है, तो लिंक एक अनसुलझे प्रतीक के साथ विफल हो जाएगा। साझा पुस्तकालयों के साथ, यह कोई समस्या नहीं है।
सामान्य तौर पर, जैसा कि अन्य ने कहा, विकल्पों के क्रम में अंतर हो सकता है या नहीं। हालांकि, नीचे दिए गए दो आदेशों से आउटपुट भिन्न हैं - इसलिए cat
आउटपुट को बदलने के लिए तर्कों का क्रम :
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
यह भी ध्यान दें कि लिनक्स पर (विशेष रूप से), GNU getopt()
कमांड लाइन को पुनः व्यवस्थित करने के लिए उपयुक्त है ताकि किसी भी अन्य तर्क से पहले सभी विकल्प (माइनस के साथ शुरू) संसाधित हो जाएं - जब तक कि आप डबल-डैश --
का उपयोग करने के अंत को चिह्नित करने के लिए उपयोग न करें तर्क, या जब तक आप पर्यावरण चर POSIXLY_CORRECT सेट नहीं करते हैं।
केवल अगर आपके पास 2 विकल्प हैं जो पारस्परिक रूप से अनन्य हैं। अन्यथा, आदेश कोई फर्क नहीं पड़ता।
बेशक, यह इस बात के आधार पर भिन्न हो सकता है कि प्रोग्राम कैसे लिखा गया है, लेकिन सभी सामान्य * निक्स टूल पर लागू होना चाहिए।
यह जानना मुश्किल है, जैसा कि अन्य पहले ही आपको बता चुके हैं कि इससे फर्क पड़ सकता है (या नहीं)।
अंगूठे का एक अच्छा नियम है मैन पेज को खोलना और पहले उदाहरण को देखना और उस आर्ग को वहां डालते समय उस आदेश का उपयोग करना।
तो अगर हम बिल्ली कमांड (आदमी बिल्ली) को देखें:
SYNOPSIS
cat [OPTION] [FILE]...
ऐसा लगता है जब तक कि फ़ाइल के ठीक होने से पहले सभी विकल्प ठीक नहीं हो जाते।
और अगर हम gcc जानवर को देखें (आदमी 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.
यह बिल्ली आदेश के रूप में समझने के लिए आसान नहीं है :)
लेकिन अगर आप इसे सुरक्षित रूप से खेलना चाहते हैं, तो -c पहले लगता है -O और उसके बाद infile (hello.c) अंतिम लगता है।
gcc -c -O hello.c
लेकिन जैसा कि आप पहले से ही जानते हैं, क्योंकि अन्य लोग काम करते हैं ... यह इसे बहुत सुरक्षित खेल रहा है :)
-static-libstdc++
?
ls -al path/to/dir
मान्य है, लेकिनls path/to/dir -al
नहीं है। तोls
, आपको (वैकल्पिक) निर्देशिका से पहले अपने विकल्पों को रखना होगा जिनकी सामग्री आप सूचीबद्ध करना चाहते हैं।