C

거믄마루 2012. 11. 14. 09:00

프로그램을 개발 도중에는 디버깅정보를 프로그램에 포함시켜 디버깅이 쉽도록 하고

개발을 완료하고 배포할때는 프로그램에 포함시켰던 디버깅 정보를 제거하는 것이

통상적인 개발방법이다.


make 스크립트로 위와 같은 옵션 전환 작업을 쉽게 할 수 있다면 

이또한 효율성이 향상될터 ... 

이봐~ 사소한것에는 신경쓰지말고 개발에만 몰두하자고 ..


보통 디버그 정보는 컴파일과 링크시 모두 옵션으로 지정해야 한다.


보통은 다음과 같이 make 스크립트를 작성한다.


 디버그용 Makefile 릴리즈용 Makefile.release
all: test

test: CFLAGS += -g -O0
test: LDFLAGS += -g -O0
test: test.o
all: test

test: CFLAGS += -O3
test: LDFLAGS += -O3
test: test.o

 

make 로 디버그모드의 프로그램을 만들고

make -f Makefile.release 명령으로 릴리즈모드의 프로그램을 만든다.

좀 번거로와 보이며 쓸데없이 스크립트 파일을 두개나 만들어 관리하기도 힘들어 보인다.

아님 다음과 같이 디버그용 바이너리를 따로 작성하는 경우도 있다.


all: test test-debug

test: CFLAGS += -O3
test: LDFLAGS += -O3
test: test.o

test-debug: CFLAGS += -g -O0
test-debug: LDFLAGS += -g -O0
test-debug: test.o


그러나 위의 방법들은 쓸데없이 바이너리를 생성하고 중복되는 스크립트 파일이 있는등관리하기 힘들다.

차라리 다음과 같이 하자...


.PHONY: all debug release

TARGET = test

all: debug

debug: CFLAGS += -g -O0
debug: LDFLAGS += -g -O0
debug: ${TARGET}

release: CFLAGS += -O3
release: LDFLAGS += -O3
release: ${TARGET}

test: test.o
...


이렇게 해두면 make 나 make debug 명령으로 디버그 모드의 바이너리를 생성할 수 있고

make release 명령으로 릴리즈 모드의 바이너리를 생성할 수 있다.

아무래도 기본이 debug 인 편이 좋을 듯 하다.


물론 모드 스위칭시 clean 을 해주어야 한다.

이유야 다들 아실것이고...

위의 예에서는 clean 명령을 만들지 않았으나

이 글을 읽는 분들은 그정도 쯤이야 알아서 하실 수 있으리라 믿는다.


위 방법을 응용하면 플랫폼별로 옵션을 달리주는 것도 쉽게 작성할 수 있다. 대박~


그럼 오늘은 여기까지...