gcc 는 상당히 유동적인 프로그램이고 거대한 컴파일 환경이다. 컴파일 명령을 gcc에게 내리면 gcc는 내부적으로 1.전처리기, 2.컴파일러, 3.어셈블러, 4.링커를 호출하여 최종 바이너리 파일을 만들어 내게된다. c의 경우에 호출하는 프로그램을 살펴보면
전처리기 : cpp0 - C PreProcessor
-I : 기본 include 디렉토리 추가 -D : 소스내에서 #define 하는것 대신 외부에서 define
컴파일러 : cc1 - C Compiler
-std=[표준] : 표준 컴파일 지정 (ex. gcc -std=c99) -W -Wall : 경고 메시지. -W 와 -Wall 옵션은 서로 다른 옵션이며, 보통 두 옵션을 모두 사용한다. -g : 바이너리 파일에 디버깅 정보를 삽입한다. -O2 : 레벨 2의 최적화 옵션. 가장 일반적으로 사용하는 옵션이다.
어셈블러 : as - ASembler
링커 : ld 또는 collect2
-L : 찾을 라이브러리 디렉토리 -l : 찾을 라이브러리 파일. 옵션을 붙이는 순서에 따라 링크순서가 달라진다. (실행시키고자 하는 main함수가 있는)소스 파일 뒤에 옵션을 붙여야 한다. 파일 이름 앞에 나오는 lib 을 떼고 확장자 이전까지 붙여준다. ex) /usr/local/libGameEngine.a 파일을 링크한다고 할때 gcc -o Main Main.c -L/usr/local -lGameEngine -shared : 공유 라이브러리 링크 -static : 정적 라이브러리 링크