8.7.1 Makefile 인 스 턴 스 - 프로젝트 의 총 Makefile
3504 단어 Linux/make
AD:
8.7 Makefile 인 스 턴 스
이 절 은 독자 들 이 Makefile 에 대한 이 해 를 강화 하기 위해 두 개의 Makefile 인 스 턴 스 를 보 여 줍 니 다.이 장 에서 언급 된 Makefile 작성 지식 을 실례 를 통 해 정리 합 니 다.
8.7.1 Makefile 인 스 턴 스 - 프로젝트 의 총 Makefile
어떤 항목 의 소스 코드 가 모듈 별로 여러 디 렉 터 리 에 저 장 될 경우, 각 모듈 의 디 렉 터 리 에는 각각 Makefile 파일 이 있 습 니 다.원본 프로그램 에 저 장 된 디 렉 터 리 구 조 는 다음 과 같다.
프로젝트 디 렉 터 리 는 다음 과 같 습 니 다:
hello (디 렉 터 리) include (디 렉 터 리) 목록 (디 렉 터 리) Makefile (Makefile 파일)
프로젝트/hello 디 렉 터 리 는 다음 과 같 습 니 다.
hello. c (소스 코드 파일) Makefile (Makefile 파일)
프로젝트/include 디 렉 터 리 는 다음 과 같 습 니 다.
hello. h (헤더 파일) list. h (헤더 파일)
프로젝트/list 디 렉 터 리 는 다음 과 같 습 니 다.
list. c (소스 코드 파일) Makefile (Makefile 파일)
디 렉 터 리 에 있 는 Makefile 파일 을 각각 쓸 수 있 습 니 다.이 Makefile 을 사용 하면 모든 원본 파일 을 컴 파일 하고 실행 가능 한 프로그램 을 만 들 수 있 습 니 다.이 Makefile 에 서 는 셸 프로 그래 밍 의 사상 을 참고 하여 많은 셸 명령 을 사용 하여 Makefile 이 작업 을 수행 하 는 데 도움 을 주 었 습 니 다.
(1) vi 편집기 에서 hello 디 렉 터 리 의 Makefile 파일 을 편집 하면 다음 과 같 습 니 다.
프로그램 목록 8 - 36 hello 디 렉 터 리 의 Makefile 파일
hello: hello.o # hello 생 성
gcc hello.o -o hello
hello: hello.c # hello. o 생 성
gcc -c hello.c
clean:
rm -rf hello *.o
.PHONY: clean
(2) vi 편집기 에서 list 디 렉 터 리 의 Makefile 파일 을 편집 하면 다음 과 같 습 니 다.
프로그램 목록 8 - 37 list 디 렉 터 리 의 Makefile 파일
list: list.o # 생 성 목록
gcc list.o -o list
list.o: list.c # list. o 생 성
gcc -c list.o
clean:
rm -rf list *.o
.PHONY: clean
프로젝트 디 렉 터 리 에 있 는 Makefile 파일 을 작성 해 야 합 니 다. 이 Makefile 파일 을 실행 하면 모든 하위 디 렉 터 리 에 있 는 Makefile 파일 을 자동 으로 실행 할 수 있 습 니 다.그 내용 은 다음 과 같 습 니 다. 독자 들 은 셸 스 크 립 트 에 따라 이 Makefile 파일 을 이해 할 수 있 습 니 다.
(3) vi 편집기 에서 procject 디 렉 터 리 의 Makefile 파일 을 편집 하면 다음 과 같 습 니 다.
프로그램 목록 8 - 38 프로젝트 디 렉 터 리 의 Makefile 파일
SUBDIRS := list hello # 하위 디 렉 터 리
all : modules
.PHONY:all
modules:
\# 모든 폴 더 에 들 어가 서 폴 더 의 Makefile 을 실행 합 니 다.
for dir in $(SUBDIRS);do make -C $$dir || exit 1;done
.PHONY:modules
clean:
\# 모든 폴 더 에 들 어가 Makefile 의 clean 을 호출 합 니 다.
for dir in $(SUBDIRS);do make -C $$dir clean;done
.PHONY: clean
(4) 이 Makefile 파일 을 실행 합 니 다.
$make -s
(5) 현재 하위 디 렉 터 리 마다 파일 변화 상황 을 봅 니 다.
$ls ./hello
hello hello.c hello.o Makefile
$ls ./include:
hello.h list.h
$ls ./list:
list list.c list.o Makefile
(6) 이 Makefile 파일 을 다시 실행 하지만 이번 에는 clean 목 표를 수행 합 니 다.
$make -s clean
(7) 현재 하위 디 렉 터 리 마다 파일 변화 상황 을 다시 봅 니 다.
$ls ./hello
hello hello.cMakefile
$ls ./include:
hello.h list.h
$ls ./list:
list list.c Makefile
FROM: http://book.51cto.com/art/201503/470223.htm