Makefile 파일 간단 한 예제 1: 테스트 검증 애플 릿 관리

개발 과정 에서 가끔 작은 문제 에 부 딪 히 는 경우 가 있 습 니 다. 보통 간단 한 애플 릿 을 만들어 서 이 작은 문제 들 의 답 을 검증 하고 의혹 을 풀 어 주 는 것 이 이론 적 인 답 보다 더 안심 이 됩 니 다.다만 시간 이 쌓 이면 서 검증 애플 릿 의 수가 많아 지면 서 셸 에서 컴 파일 명령 을 두 드 릴 때마다 골 치 아 픈 일이 다. 혼 란 스 럽 고 기억 도 시험 하고 효율 도 떨어진다.
make 와 Makefile 파일 은 프로젝트 구축 의 효과 적 인 도구 로 완전한 프로젝트 개발 에 있어 서 기본적으로 자동 구축 을 실현 하여 효율 과 신뢰성 을 높 인 다.그래서 여기 서도 make, Makefile 도 구 를 빌려 Makefile 의 규칙 을 충분히 활용 하여 테스트 검증 을 관리 하 는 애플 릿 을 도 와 줍 니 다.다음은 이 Makefile 파일 입 니 다:
4. 567913. Makefile 에서 규칙 을 충분히 이용 하면 원본 파일 이름 을 수 동 으로 입력 하 는 번 거 로 움 과 유 지 를 피 할 수 있 고 확장 성 을 실현 할 수 있 습 니 다. 나중에 추 가 된 테스트 프로그램 은 Makefile 을 수정 하지 않 아 도 컴 파일 관 리 를 할 수 있 습 니 다.대상 파일 의 목표 가 필요 없다 고 생각 되면 c. o 규칙 을 제거 하고 기본 컴 파일 규칙 을 사용 할 수 있 습 니 다.
테스트 프로그램 을 컴 파일 해 야 할 때 셸 이 Makefile 디 렉 터 리 에 make 명령 을 사용 한 다음 tab 키 를 누 르 면 실행 가능 한 목표 가 자동 으로 나타 나 고 자동 으로 보완 할 수 있 으 며 목 표를 기억 할 필요 가 없습니다.
makefile 의 자동화 변수:
CC=gcc
LIB_PATH+=$(HOME)/opt/lib   #       ,       
CFLAGS+= -O2 -Wall -D_GNU_SOURCE_ -g
LDFLAGS+= -L$(LIB_PATH) -lzlog -lpthread
INC_FLAGS+= -I.

all     :       $(EXES)  #         

$(EXES)  :       %:%.o   #  ,      ,             ,    make
        $(CC) -o $@ $^ $(LDFLAGS) -Wl,-rpath=$(LIB_PATH)

.c.o   :  #       ,             ,    make
       $(CC) $(CFLAGS) -o $@ -c $< $(INC_FLAGS)

다음은 같은 규칙 으로 한 사람의 프로젝트 를 관리 하 는 Makefile 파일 입 니 다. 똑 같이 확장 이 잘 되 어 있 습 니 다. 파일 을 추가 할 때 Makefile 을 수정 할 필요 가 없습니다.
1、$@:           

2、$<:        ,        (%)   ,                ,       

3、$^:           ,     ,          ,              

4、$+: $^  ,        。

위의 Makefile 이 clean 을 실행 할 때 아래 의 오류 알림 이 나타 납 니 다. 이것 은 moc * 가 이미 있 기 때 문 입 니 다.cpp 원본 파일 이 존재 하고 SRCS + = $(MOCS) 를 실행 하면 moc * 가 다시 생 성 됩 니 다.cpp 파일 이 므 로 moc * 를 반복 합 니 다.o 의 목표.이것 은 프로젝트 컴 파일 에 영향 을 주지 않 습 니 다.
CC=arm-hismall-linux-g++
CXXFLAGS=-pipe -fno-exceptions -fno-rtti -Wall -O2 -DQWS
QT_DIR= $(HOME)/qt/qt-hisi-2.2.0
LDFLAGS= -lqte -L$(QT_DIR)/install/lib -Wl,-rpath-link=$(QT_DIR)/build/lib
INCFLAGS= -I$(QT_DIR)/qtopia-free-2.2.0/qt2/include

HEADERS:= $(wildcard *.h) #       
MOCS:= $(HEADERS:%.h=moc_%.cpp)  #       moc   ,   moc  

SRCS:= $(wildcard *.cpp) #       
SRCS+= $(MOCS) # moc            
OBJS:= $(SRCS:%.cpp=%.o) #         
TARGET = show

all: $(TARGET)

$(TARGET): $(OBJS)
        $(CC) $^ -o $@ $(LDFLAGS)

$(MOCS):  moc_%.cpp:%.h
        moc $^ -o $@

$(OBJS):  %.o:%.cpp  #                       ,        
        $(CC) $(CXXFLAGS) -c $^ -o $@ $(INCFLAGS)

clean: 
        @echo $(SRCS)
        @echo $(OBJS)
        rm -f moc_*.cpp *.o $(TARGET)

.PHONY: all clean

PS: 상기 목표 의 중복 을 해결 하 는 방법
SRCS 변수 에 있 는 중복 moc 원본 파일 만 삭제 하면 됩 니 다. 따라서 Makefile 파일 에서 SRCS 변 수 를 가 져 올 때 조금 만 처리 하고 아래 문 구 를 위의 Makefile 파일 에 SRCS + = $(MOCS) 문 구 를 추가 하면 됩 니 다.
Makefile:23: target `moc_home.o' given more than once in the same rule.

셸 명령 도 구 를 이용 하여 변수 에 있 는 중복 문자열 단 어 를 제거 하 는 것 입 니 다.

좋은 웹페이지 즐겨찾기