GCC compiler (내부 매크로, Makefile)

GCC

Gnu compiler collection C, C++, objective C, portlan, Java 등 컴파일러를 포함하는 의미

소스파일을 이용해 실행파일을 만들 때까지 필요한 프로그램을 차례로 실행시키는 툴



과정

*.c -> (전처리 ccp) -> *.i -> (컴파일 cc1) -> *.s -> (어셈블 as) -> *.o -> (링크id) -> a.out

소스파일->전처리된 파일->어셈블리어 파일->오브젝트 파일->실행 파일



Option

( -c ) : 오브젝트파일까지만 컴파일 하고 링크하는 과정 생략 (gcc -c c.c ) => c.o


( -o ) : 바이너리 형식의 출력 파일 이름 지정, 없을시 a.out (gcc -o file file.c)


( -I ) : 헤더 파일을 검색하는 디렉토리 목록을 추가(이 옵션이 없으면 해당 파일에서 헤더파일을 검색하지만 있다면,

gcc age -c -l /root 와 같이 경로를 설정함 (대문자 아이)



분리 컴파일

소스가 길 경우 나눠서 코딩한 후 묶어서 컴파일


(gcc main.c hi.c -o test)


Gcc -c main.c// gcc -c hi.c// gcc main.o hi.o -otest          


Make : gcc는 여러 파일중 어떤 파일이 수정된다면, 모든 파일을 다시 컴파일 하고 링크해야 하지만

make는 수정된 파일을 자동으로 알아내 컴파일 하고 수정하지 않은 파일은 기존 오브젝트파일 이용한다.


( , ) 같은 건 사용하지 않고 공백으로 한다. 명령을 시작하기 전에는 TAB, 다른 곳에선 TAB 불가, 순서는 중요하지 않다.



Makefile

test: test1.o test2.o test3.o

gcc -o test test1.o test2.o test3.o

test1.o: test1.c a.h

gcc -c test1.c

test2.o: test2.c a.h b.h

gcc -c test2.c

test3.o: test3.c b.h c.h

gcc -c test3.c




'SW > LINUX' 카테고리의 다른 글

GDB  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05
리눅스 명령어 - USER  (0) 2017.09.05