답변:
이것은 프로그램 자체에 달려 있습니다. 운영 체제는 주문이 중요한지 여부를 지시하지 않습니다.
GCC의 옵션 세트는 너무 거 대해서 임의의 순서로 옵션을 제공 할 수 있다면 권한을 가지고 말할 수 없습니다 . 해당 옵션에 대한 설명서를 읽어야합니다. 그러나 일반적으로 경험에 따라 두 개 이상의 상호 배타적 인 옵션이있는 경우 (예 : -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
다시 말하지만 이것은 문제의 개별 프로그램에 달려 있습니다. 확실하지 않은 경우 설명서를 읽으십시오.
GCC에서도 명령 행 옵션의 순서가 중요한 경우가 있습니다. 정적 라이브러리 (.a)와 링크하는 경우 프로그램에 지정 되지 않은 함수를 호출하는 함수 -llib1 -llib2
가 지정 되어 있으면 해석되지 않은 기호로 링크가 실패합니다. 공유 라이브러리에서는 이것이 문제가되지 않습니다.liblib2.a
liblib1.a
일반적으로 다른 사람들이 말했듯이 옵션의 순서는 차이를 만들거나 만들지 않을 수 있습니다. 그러나 아래 두 명령의 출력이 다르므로 인수 순서에 cat
따라 출력 이 변경됩니다.
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
Linux에서 (특히) GNU getopt()
는 명령 행의 순서를 변경하여 모든 옵션 (마이너스로 시작)이 다른 인수보다 먼저 처리되도록합니다. 이중 대시 --
를 사용 하여 환경 변수 POSIXLY_CORRECT를 설정하지 않은 경우.
다른 사람들이 이미 말했듯이 차이를 만들거나하지 않을 수 있습니다.
경험상 가장 좋은 방법은 맨 페이지를 열고 첫 번째 예제를보고 arg를 넣을 때 해당 순서를 사용하는 것입니다.
cat 명령 (man cat)을 보면 :
SYNOPSIS
cat [OPTION] [FILE]...
모든 옵션이 파일 인수보다 앞서 있으면 괜찮을 것 같습니다.
그리고 우리가 gcc beast (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++
어떻습니까?