2011-02-01 5 views
8

는 다음 메이크를 고려조건부로 파일을 Makefile에 포함시키는 방법은 무엇입니까?

# <include global configuration Makefile> 

INCL = -I../include \ 
     -I<whatever> 

CPPFLAGS=$(DEFS) $(INCL) 
CXXFLAGS = -O0 -g -Wall -fmessage-length=0 

SRCS = $(wildcard *.cpp) 

OBJS = $(SRCS:.cpp=.o) 

all: $(OBJS) 

%.o: %.cpp 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o [email protected] $< 


depend: .depend 

.depend: $(SRCS) 
    $(CPP) $(CPPFLAGS) -M $^ > [email protected] 

clean: 
    rm -f $(OBJS) 
    rm .depend 


-include .depend 
메이크

이는 g++ -M 명령을 사용 #include 의존성 체인을 생성하고, 그것을 포함한다. 이것은 오랜 시간이 걸릴 수 있습니다. 문제는 make clean이 호출 될 때이 파일이 생성되는데,이 파일이 어쨌든 삭제 될 때입니다. 조건부로이 파일을 포함시키는 방법입니까? 그리고 클린 대상이 실행되면이 파일을 만드는 것을 방해하지 않습니까? 이 같은

+0

자세한 답변은 [여기] [1]입니다. [1] : http://stackoverflow.com/questions/3714041/why-does-this-makefile-execute-a-target-on-make-clean/3714054#3714054 –

답변

12

뭔가 :

ifneq ($(MAKECMDGOALS),clean) 
-include .depend 
endif 

자세한 내용은 make manual page on Goals를 참조

편집 : -include이 그렇지 않으면 무시되고, 탭 들여 쓰기 수 없습니다.

1

에 대한 종속성은 컴파일 중에 무료 (즉, 런타임 비용 없음)을 수행 할 수 있습니다. clean을 실행하면 종속성이 원래대로 다시 작성되지 않습니다. 컴파일 및 종속성 생성을과 결합하여 Paul Smith의 Advanced Auto-Dependency Generation 용지를 참조하십시오.

관련 문제