Makefile tip

Posted at 2008/09/09 14:48 // in Programming // by Daniel
$* <- 확장자가 없는 현재의 목표 파일(Target)

$@ <- 현재의 목표 파일(Target)

$< <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일 이름

$? <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일들 이름

 

 

main.o : main.c io.h
gcc -c $*.c

$* 는 확장자가 없는 현재의 목표 파일이므로 $* 는 결국 main 에 해당한다.

test : $(OBJS)
gcc -o $@ $*.c

$@는 현재의 목표 파일이다. 즉 test에 해당된다.

.c.o :
gcc -c $< (또는 gcc -c $*.c)
$< 는 현재의 목표 파일보다 더 최근에 갱신된 파일 이름이라고 하였다. .o 파일보다 더 최근에 갱신된 .c 파일은 자동적으로 컴파일이 된다. 가령 main.o를 만들고 난 다음에 main.c를 갱신하게 되면 main.c는 $<의 작용에 의해 새롭게 컴파일이 된다.

 

$<와 $?의 차이는 파일들을 다 얘기하느냐 아니냐이다

sdltest_speed: sdltest_speed.o md.o
    g++ $(LDFLAGS) -o $@ $<

일 때는

g++ `sdl-config --libs` -lSDL_image -o sdltest_speed sdltest_speed.o

가 실행되지만

sdltest_speed: sdltest_speed.o md.o
    g++ $(LDFLAGS) -o $@ $?

일 때는

g++ `sdl-config --libs` -lSDL_image -o sdltest_speed sdltest_speed.o md.o

가 실행된다.

참고 http://kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-3.html#ss3.2

크리에이티브 커먼즈 라이센스
Creative Commons License

이 글에는 트랙백을 보낼 수 없습니다