2012-07-24 2 views
2

나는 GNU makefile에 어리석은 문제가있다. C 프로그램을 빌드하는 데 두 개의 목표를 정의하려고합니다. 하나는 디버깅 상태이고 다른 하나는 디버깅 상태가 아닙니다.Makefile 명령어의 변수 설정

runNoDebug: setNoDeb objs runMe 

runDebug: setDeb objs runMe 

setNoDeb: 
    {EXPORT} MyDEBUG= -O3 

setDeb: 
    {EXPORT} MyDEBUG="-DDEBUG=1 -g" 

objs: cFiles 
    $(CC) -o [email protected] $^ $(cFiles) $(CFLAGS) $(LIBS) $(MYDEBUG) 

runme: objs 
    ./oo 

메이크 에러이 실행에 발생하는 디버깅을 설정하는 명령은 에러를 일으키는 서브 쉘을 실행한다. "내보내기"가 추가되면 해당 서브 쉘에 변수가 정의됩니다.

개체를 생성하는 동안이 변수를 makefile에서 정의하고 싶습니다.

가능합니까? 또는 "objs : cFiles"대상을 복제해야합니까?

+3

의 중복 가능성 [내가 디버그 및 릴리스 내 메이크 파일을 구성하는 방법을 빌드?] (http://stackoverflow.com/questions/1079832/how-can-i-configure-my-makefile- 디버그 및 릴리스 빌드 용) – Mark

답변

2

당신은 target-specific variable values이 필요합니다

이 기능을 사용하면 현재 구축되어 있는지 확인 대상에 따라, 같은 변수에 대해 다른 값을 정의 할 수 있습니다.

runNoDebug: setNoDeb runMe 

runDebug: setDeb runMe 

setNoDeb: CFLAGS += -O3 
setNoDeb: objs 

setDeb: CPPFLAGS += -DDEBUG=1 
setDeb: CFLAGS += -g 
setDeb: objs 

objs: $(cFiles) 
    $(CC) $(CFLAGS) $^ $(LIBS) -o [email protected]