make 프로필

 
순서
make 가 뭐 예요?간단 한 프로그램 을 쓸 때 원본 파일 이 하나 에서 두 개 밖 에 없 을 때% cc file1. c file2. c 를 입력 하면 문제 가 없 지만 원본 파일 이 많 으 면 귀 찮 습 니 다. 컴 파일 하 는 시간 도 길 어 집 니 다.하나의 방법 은 대상 파일 을 사용 하여 원본 파일 이 바 뀐 상태 에서 만 원본 파일 을 다시 컴 파일 하 는 것 이다.따라서 이렇게 할 수 있 습 니 다:% cc file1. o file2. o. file37. c...............................................................이렇게 하면 컴 파일 과정 을 매우 빨리 할 수 있 지만, 피곤 한 입력 문 제 를 해결 할 수 는 없다.또는 입력 문 제 를 해결 하기 위해 셸 script 을 사용 할 수 있 지만 모든 파일 을 다시 컴 파일 해 야 합 니 다. 대형 프로젝트 에 서 는 비효 율 적 입 니 다.만약 수백 수천 에 달 하 는 원본 파일 이 있다 면 어떻게 합 니까?만약 우리 가 많은 사람과 합작 하여 프로그램 을 쓰 고 있다 면, 다른 사람 이 원본 파일 을 수정 하고, 또 너 에 게 알려 주지 않 았 는데, 어떻게 해 야 합 니까?아마도 우 리 는 상기 두 가지 방법 을 결합 하여 셸 script 과 같은 것 을 쓸 수 있 을 것 이다.이 파일 은 원본 파일 을 언제 컴 파일 해 야 할 지 결정 하 는 어떤 기 교 를 포함 하고 있 습 니 다.지금 우리 가 원 하 는 것 은 바로 프로그램 이 이런 기 교 를 알 수 있 는 것 이다. 왜냐하면 이런 기 교 를 알 아야 하기 때문에 셸 은 아직 그렇게 큰 능력 이 없 기 때문이다.이 프로그램 은 make 라 고 합 니 다.Makefile 이라는 파일 을 읽 습 니 다. 이 파일 은 원본 파일 간 의 의존 관 계 를 결정 합 니 다.그리고 원본 파일 을 언제 컴 파일 해 야 할 지, 언제 컴 파일 해 서 는 안 될 지 결정 했다.예 를 들 어 어떤 규칙 은 "from boz. o 가 from boz. c 보다 낡 았 다 면 누군가가 from boz. c 를 수정 했다 는 뜻 이기 때문에 우 리 는 이 파일 을 다시 컴 파일 해 야 한다"고 말 할 수 있다. 이 Makefile 은 make 가 원본 파일 을 어떻게 다시 컴 파일 해 야 하 는 지 알려 주 는 규칙 도 있 기 때문에 make 는 훨씬 강력 한 도구 이다.Makefile 은 보통 원본 파일 과 같은 디 렉 터 리 에 저 장 됩 니 다. Makefile, Makefile 또는 MAKEFILE 라 고 할 수 있 습 니 다.대부분의 프로그래머 들 은 이 파일 을 디 렉 터 리 목록 의 맨 위 에 놓 아 쉽게 볼 수 있 도록 Makefile 이라는 이름 을 사용 합 니 다.
make 를 사용 하 는 예
이것 은 매우 간단 한 make 파일 입 니 다. foo: foo. c cc - o foo foo. c 는 두 줄 을 포함 하고 한 줄 은 의존 관계 이 며 한 줄 은 실행 동작 입 니 다.관계 에 의존 하 는 줄 에는 프로그램의 이름 (target) 이 포함 되 어 있 으 며, 사칭 에 이 어 빈 칸, 마지막 으로 원본 파일 의 이름 입 니 다.make 가 이 줄 을 읽 을 때 foo 가 존재 하 는 지 확인 합 니 다.존재 한다 면 foo 와 foo. c 의 마지막 수정 시간 이 어떻게 다른 지 비교 해 보 세 요.foo 가 존재 하지 않 거나 foo. c 보다 오래 되 었 다 면 동작 을 수행 하 는 줄 을 확인 하 세 요.다시 말 하면 foo. c 가 다시 컴 파일 해 야 할 때 어떻게 해 야 하 는 지 하 는 것 이다.동작 을 수행 하 는 줄 은 tab (tab 누 르 기) 로 시작 하고 명령 행 에서 foo 가 실행 하 는 명령 을 만 듭 니 다.foo 가 만 료 되 었 거나 존재 하지 않 으 면 make 는 이 명령 을 실행 하여 foo 를 만 듭 니 다.다시 말 하면, 이것 이 바로 foo. c 를 다시 컴 파일 하 는 규칙 이다.따라서 make 를 입력 하면 foo 와 foo. c 가 수정 시간 에 동기 화 되 었 는 지 확인 합 니 다.이 원칙 은 Makefile 에서 수백 수천 개의 대상 파일 로 확장 할 수 있 습 니 다. 실제로 FreeBSD 에 서 는 적절 한 디 렉 터 리 에 make World 를 입력 하면 전체 운영 체 제 를 컴 파일 할 수 있 습 니 다!Makefile 의 또 다른 유용 한 특징 은 대상 파일 이 반드시 프로그램 이 아니 라 는 것 이다.예 를 들 어, 우 리 는 이러한 make 파일 을 가 질 수 있다.foo: foo. c cc - o foo. c install: cp foo/home/me 우 리 는 다음 명령 을 입력 하여 make 에 게 어떤 목 표를 실행 해 야 하 는 지 알려 줄 수 있 습 니 다.% make target make 는 이 목표 만 실행 하고 다른 목 표를 무시 합 니 다.예 를 들 어 우리 가 make foo 를 입력 하면 foo 만 실 행 됩 니 다. 필요 한 경우 foo 를 다시 컴 파일 하고 인 스타 그램 목 표를 계속 수행 하지 않 습 니 다.만약 우리 가 make 라 는 명령 만 입력 한다 면 make 는 첫 번 째 목 표를 찾 을 것 이 고 실행 이 끝 난 후에 다른 목 표를 상관 하지 않 을 것 이다.예 를 들 어 우리 가 make foo 를 입력 하면 make 는 foo 라 는 목표 로 이동 하고 필요 한 상황 에서 foo 를 다시 컴 파일 하 며 인 스 톨 목 표를 실행 하지 않 고 중단 합 니 다.인 스타 그램 이라는 목 표 는 다른 것 에 의존 하지 않 습 니 다!이것 은 우리 가 make install 을 입력 하면 이 목표 의 모든 명령 이 실 행 될 것 임 을 의미 합 니 다.이 경우 foo 는 사용자 의 집 디 렉 터 리 에 설 치 됩 니 다.프로그램의 Makefile 은 프로그램 이 정확하게 컴 파일 된 후에 정확 한 디 렉 터 리 에 설치 할 수 있 도록 이렇게 쓰 여 있 습 니 다.
 
해석 을 시도 해 보면 헷 갈 리 기 쉽다.만약 당신 이 make 가 어떻게 일 하 는 지 잘 모른다 면, 가장 좋 은 방법 은 먼저 간단 한 프로그램, 예 를 들 어 'hello World' 와 위의 예 와 같은 make 파일 을 써 서 실험 하 는 것 입 니 다.그리고 더 나 아가 여러 개의 원본 파일 을 사용 하거나 원본 파일 에 헤더 파일 을 포함 시 킵 니 다.touch 명령 은 파일 내용 을 바 꾸 지 않 고 파일 의 날 짜 를 바 꿀 수 있 도록 유용 합 니 다.
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
 
간단 한 Makefile 파일
익숙 하지 않 은 것 을 편리 하 게 하기 위해 make 이 절 은 간단 한 용법 예 시 를 제공한다.Make 는 그 자체 의 장점 으로 모든 유 닉 스 시스템 에서 찾 을 수 있 습 니 다.Gnu make 에 대한 더 많은 정 보 를 알 고 싶 으 시 면 Richard M. Stallman 과 Roland McGrath 가 작성 한 것 을 참고 하 시기 바 랍 니 다. GNU Make 수첩.
에서 Makefile (기본 값 은 현재 디 렉 터 리 에 있 는 'Makefile' 이라는 파일) 에서 항목 의 설명 을 읽 습 니 다.Makefile 은 일련의 목표 (예 를 들 어 실행 가능 한 파일) 와 의존 (예 를 들 어 대상 파일 과 원본 파일) 의 컴 파일 규칙 을 지정 합 니 다. 그 형식 은 다음 과 같 습 니 다.
目标: 依赖
	命令

모든 목표 에 대해 make 는 해당 하 는 의존 파일 수정 시간 을 확인 하여 해당 대상 이 해당 하 는 명령 을 이용 하여 다시 만들어 야 하 는 지 확인 합 니 다.Makefile 에서 명령 행 은 하나의 것 으로 해 야 한 다 는 것 을 알 게 되 었 습 니 다. TAB 빈 칸 이 아 닌 문 자 를 들 여 씁 니 다.
GNU Make 는 Makefile 의 구축 을 간소화 하기 위해 기본 규칙 (은밀 한 규칙 참조) 을 많이 포함 합 니 다.예 를 들 어 'o' 파일 을 지정 하면 'c' 파일 을 컴 파일 해서 얻 을 수 있 고 실행 가능 한 파일 은 'o' 를 연결 해서 얻 을 수 있다.함 축 된 규칙 은 make 변수 라 는 것 을 통 해 지정 합 니 다. 예 를 들 어 CC (C 언어 컴 파일 러) 와 CFLAGS (C 프로그램의 컴 파일 옵션);Makefile 파일 에서 한 줄 을 독점 합 니 다. 변수 = 값 의 형식 이 설정 되 었 다.맞다. C++ ,그 등가 변 수 는 CXX 와 CXXFLAGS 이 고 변 수 는 CPPFLAGS 는 컴 파일 예비 처리 옵션 이다.
현재 우 리 는 지난 절 프로젝트 를 위해 간단 한 Makefile 파일 을 씁 니 다.
CC=gcc
CFLAGS=-Wall
hello: hello.o hello_fn.o
clean:
	rm -f hello hello.o hello_fn.o

이 파일 은 이렇게 읽 을 수 있 습 니 다: C 언어 컴 파일 러 를 사용 합 니 다. gcc, 컴 파일 옵션 '- Woll', 대상 파일 'hello. o' 와 'hello'fn. o '실행 가능 한 파일 생 성 hello (파일 'hello. o' 와 'hello fn. o' 는 은밀 한 규칙 을 통 해 각각 'hello. c' 와 'hello fn. c' 로 생 성 된다).대상 clean 은 파일 에 의존 하지 않 고 컴 파일 된 모든 파일 을 간단하게 제거 합 니 다.rm 명령 의 옵션 '- f' (force) 는 파일 이 존재 하지 않 을 때 발생 하 는 오류 메 시 지 를 억제 합 니 다.
또한, main 함 수 를 포함 하 는 cpp 파일 이 A. cpp 이면 Makefile 에서 실행 가능 한 파일 이름 도 A 로 쓰 는 것 이 좋 습 니 다.
이 Makefile 파일 을 사용 하려 면 입력 하 십시오. make.파 라 메 터 를 추가 하지 않 고 make 를 호출 할 때 Makefile 파일 의 첫 번 째 목표 가 만들어 져 실행 가능 한 파일 'hello' 를 생 성 합 니 다.
$ make
gcc -Wall -c -o hello.o hello.c
gcc -Wall -c -o hello_fn.o hello_fn.c
gcc hello.o hello_fn.o -o hello
$ ./hello
Hello, world!

실행 가능 한 파일 을 다시 만 들 기 위해 원본 파일 이 수정 되 었 습 니 다. 간단하게 다시 입력 하 십시오. make 됐다.대상 파일 과 파일 에 의존 하 는 시간 스탬프 를 검사 함으로써 프로그램 make 는 어떤 파일 이 수정 되 었 는 지 식별 하고 해당 하 는 규칙 에 따라 대상 파일 을 업데이트 할 수 있 습 니 다.
$ vim hello.c (打开编辑器修改一下文件)
$ make
gcc -Wall -c -o hello.o hello.c
gcc hello.o hello_fn.o -o hello
$ ./hello
Hello, world!

마지막 으로 make 에서 생 성 된 파일 을 제거 하고 make clean 을 입력 합 니 다.
$ make clean
rm -f hello hello.o hello_fn.o

전문 적 인 Makefile 파일 은 설치 (make install) 와 테스트 (make check) 등 추가 목 표를 포함 합 니 다.
본 논문 에서 언급 된 예 는 Makefile 이 전혀 필요 없 을 정도 로 간단 하지만 큰 프로그램 에 make 를 사용 하 는 것 이 필요 합 니 다.
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기