2012-08-30 4 views
0

변수의 값에 따라 특정 대상을 재구성 할 수있는 방법이 있습니까?Makefile을 사용하여 오브젝트 파일 재구성

DEBUG라는 명령 줄 설정이있는 Makefile이 있습니다. "make DEBUG = no"를 실행 한 후에 "make DEBUG = yes"를 호출하면 특정 오브젝트 파일이 재 빌드 (디버그 정보 포함)되기를 원합니다.

+0

분명히 밝혀지기를, 당신은 (쉬운) 변수뿐만 아니라 이전에 실행 된 방식 (더 까다 롭습니다)에 의존하는 Make의 동작을 원합니다. 그리고 나는 두 개의 서로 다른 버전의 오브젝트 파일 (정규 파일과'DEBUG' 파일)을 갖고 싶지만, 같은 디렉토리에 같은 이름과 같은 디렉토리가 있기를 원한다. 시각. 그게 맞습니까? – Beta

답변

0

파일이 없거나 값이 다른 경우 해당 변수의 값을 파일에 씁니다. 모든 오브젝트 파일을 해당 파일에 종속 시키십시오. 그러면 파일이 변경 될 때마다 모든 오브젝트 파일이 재 컴파일됩니다. 예컨대 :

BUILD := debug 
SHELL := /bin/bash 
$(shell [[ `cat .build 2>/dev/null` == ${BUILD} ]] || echo ${BUILD} > .build) 

all : prog 

prog : .build 
    touch [email protected] 

clean : 
    rm prog .build 

.PHONY: all clean 

예 실행 : MSVS이하는 것처럼

$ make 
touch prog 
$ make 
make: Nothing to be done for `all'. 
$ make BUILD=release 
touch prog 
$ make BUILD=release 
make: Nothing to be done for `all'. 

더 좋은 방법은 디버그 및 릴리스를 구축하는 것입니다 다른 디렉토리에 빌드하지만 좀 더 고급 메이크 파일이 필요합니다.

+0

매우 제한된 Windows 환경에서 작업 중이므로 모든 GNU 제품 (고양이, 에코 등)이 없습니다. 어떤 아이디어? – cyberguijarro

+0

그런 다음 사용 가능한 모든 스크립팅을 사용하십시오. –

+0

윈도우 쉘이 [[]] 또는 ||과 같은 연산자를 사용한다고 생각하지 않습니다. 어쨌든 고마워. – cyberguijarro

관련 문제