리눅스에서 프로그래밍 하다 보면 꼭 필요한 유틸리티이다. make 유틸은
소스관리를 돕고 컴파일 되어야 하는 소스 파일도 관리한다.
main.c , sub.c , ui.c test.c 라는 파일이 있을 때 보통
gcc –o main main.c sub.c ui.c test.c
이렇게 컴파일 한다. 이걸 일일이 타이핑 하던지 쉘 스크립트로 구성해서
할 수 있지만, 그렇게 편한 방법은 아니다. 그래서 make 유틸을 사용하여
Makefile 을 구성하면 좀더 편안한 구성이 될수 있다.
1. 일반적 사용 예
main: main.o sub.o ui.o test.o
main.o: main.c
sub.o: sub.c
ui.o: ui.c
test.o: test.c
|
위는 Makefile로 구성한 컴파일 예이다.
한 라인씩 간단하게 설명해 보면,
1. main 이 구성되기 위해선 main.o sub.o ui.o test.o 오브젝트 파일이 필요로 한다.
파일이 없다면, 각 파일 구성 규칙으로 이동한다.
2. 각 파일 구성 규칙은 단순하게 gcc 의 c 옵션으로 오브젝트파일만을 생성한다.
3. 모든 오브젝트 파일이 존재하게 되면 main 구성 규칙으로 이동하여
Linking을 하게 된다.
2. 매크로 사용
OBJECT = main.o sub.o ui.o test.o main: $(OBJECT)
main.o: main.c
sub.o: sub.c
ui.o: ui.c
test.o: test.c
|
매크로를 사용하여 좀더 간단하게 구성할 수 있다. 사용법 또한 일반 변수에
값을 대입 하듯이 사용하면 되고, 사용법은 $(매크로이름) 과 같이 사용한다.
또한 make 유틸에는 내부 매크로가 있다. 이는 좀더 Makefile 구성을
간략하게 생략하게 한다든지 확장을 위해서 있는 매크로로 몇몇개 자주쓰는
매크로 위주로 간략한 설명만 하도록 하겠다.
$* | 확장자가 없는 현재의 목표 이름 main.o: main.c gcc –c $*.c $* 는 목표 이름 main.o 에서 main 이 된다. |
$@ | 현재 목표 이름 main: $(OBJECT) gcc –o $@ main.o sub.o ui.o test.o $@ 는 목표 이름 main 이 된다. |
$< | 조건 중 첫번째 이름 main.o: main.c test.h gcc –c $< $<는 main.c test.h 중 첫번째 main.c가 선택된다. |
$? | 현재의 목표 이름 보다 더 최근에 갱신된 이름 main.o: main.c test.h gcc –c $? test.h가 수정되었다면 test.h가 선택 |
$^ | 조건에 있는 내용을 치환 main: main.c test.h gcc –o $^ $^는 main.c test.h 를 뜻한다. |
'프로그래밍 > 리눅스 드라이버' 카테고리의 다른 글
리눅스 커널에서 사용하는 Container_of 매크로 (0) | 2013.08.14 |
---|---|
쓰레드 동기화(synchronization) (0) | 2013.08.14 |
GCC 옵션 간단하게 정리하기 (0) | 2013.08.14 |
모듈 프로그래밍 #2 (0) | 2013.08.14 |
모듈 프로그래밍 #1 (0) | 2013.08.14 |