# Make의 실행
$ make [-f makeFileName] (Default : makefile)
# makefile 예제
test : main_test.o func1.o func2.o
cc –o test main_test.o func1.o func2.o
main_test.o : io.h main_test.c
cc –c main_test.c
func1.o : io.h func1.c
cc –c func1.c
func2.o : io.h func2.c
cc –c func2.c
$ make (실행 결과)
cc –c main_test.c
cc –c func1.c
cc –c func2.c
cc –o test main_test.o func1.o func2.o
# 특정 파일 수정 명령 touch
$ touch func1.c
# Label 대상
clean : (레이블 대상)
rm main_test.o func1.o func2.o
$ make clean
rm main_test.o func1.o func2.o
# 매크로 정의
대소문자는 구분하지 않으며 대문자를 일반적으로 사용한다.
<형식> M_NAME=value
<사용> $( M_NAME)
Ex)
<makefile>
OBJ=main_test.o func1.o func2.o
Test : $(OBJ)
cc –o test $(OBJ)
main_test.o : io.h main_test.c
cc – c main_test.c
func1.o : io.h func1.c
cc –c func1.c
func2.o : io.h func2.c
cc –c func.c
clean :
rm $(OBJ)
# 내부 매크로
$@ 현재의 목표 파일(Target) 이름
$* 확장자가 없는 현재의 목표 파일(Target) 이름
$< 현재 필수 조건 파일중 첫번째 파일의 이름
$? 현재 대상보다 최근에 변경된 필수 조건 파일 이름
$^ 현재 모든 필수 조건 파일들
<makefile>
OBJ=main_test.o func1.o func2.o
test : $(OBJ)
cc –o $@$(OBJ)
main_test.o : io.h main_test.c
cc –c $<
func1.o : io.h func1.c
cc –c $*.c
func2.o : io.h func2.c
cc –c $*.c
clean:
rm $(OBJ)
# make 규칙
1. 명시적 규칙(Explicit Rules)
Make 파일을 작성할 때 컴파일에 필요한 각 처리단계와 의존성을 분명히 지정하여 make를 처리하는 것을 명시적 규칙(explicit rules)이라 한다.
2. 암시적 규칙(Inference Rules)
Make가 미리 정의된 규칙을 이용해 make 파일을 단순화시키는 규칙을 암시적 규칙이라 한다.
<makefile> - 암시적 규칙의 예
OBJ=main_test.o func1.o func2.o
test : $(OBJ)
cc –o $@$^
clean:
rm $(OBJ)
암시적 규칙은 –p 옵션을 통하여 그 내용을 확인할 수 있다.
$ make –p
# 접미사 규칙
<makefile>
OBJ=main_test.o func1.o func2.o
test : $(OBJ)
cc –o $@$(OBJ)
.c.o:
cc - $(CFLAGS)$<
clean:
rm $(OBJ)
$(CFLAGS)를 이용하여 디버깅 옵션을 주려면 다음과 같이 한다.
$ make CFLAGS=”-g”
cc –c –g main_test.c
cc –c –g func1.c
cc –c –g func2.c
cc –o test
'C' 카테고리의 다른 글
[함수] memcmp - 메모리 비교 (0) | 2008.10.15 |
---|---|
gcc 컴파일 옵션 (0) | 2008.07.16 |
[함수] sprintf - 출력 (0) | 2008.05.16 |
[함수] memcpy - 메모리카피 (0) | 2008.05.16 |
[함수] scanf - 문자입력받기 (0) | 2008.05.15 |