메이크는 빌드 hello
중 하나가 있다면 실행을 main.cpp
, hello.cpp
, factorial.cpp
변경. 해당 사양을 달성 할 수있는 가장 작은 Makefile은 다음과 같습니다.
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
- 프로 : 매우 읽기 쉽다
- 단점 : 유지 관리의 악몽, C ++ 종속성의 중복
- 단점 : 효율성 문제, 하나만 변경된 경우에도 모든 C ++를 다시 컴파일
위의 내용을 개선하기 위해 편집 된 C ++ 파일 만 컴파일합니다. 그런 다음 결과 객체 파일을 서로 연결하면됩니다.
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
- 프로 : 효율성 문제 해결
- 죄수 : 새로운 유지 관리 악몽, 객체 파일 규칙의 오타 가능성
이를 개선하기 위해 모든 객체 파일 규칙을 단일 .cpp.o
규칙으로 바꿀 수 있습니다 .
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o $@
- 찬성 : 짧은 makefile로 돌아가서 약간 읽기 쉽다.
여기에 .cpp.o
규칙을 구축하는 방법을 정의 anyfile.o
에서 anyfile.cpp
.
$<
이 경우 첫 번째 종속성과 일치합니다. anyfile.cpp
$@
이 경우 타겟과 일치합니다 anyfile.o
.
Makefile에 존재하는 다른 변경 사항은 다음과 같습니다.
- 컴파일러를 g ++에서 C ++ 컴파일러로 쉽게 변경할 수 있습니다.
- 컴파일러 옵션을보다 쉽게 변경할 수 있습니다.
- 링커 옵션을보다 쉽게 변경할 수 있습니다.
- C ++ 소스 파일 및 출력을보다 쉽게 변경할 수 있습니다.
- 응용 프로그램 빌드를 시도하기 전에 모든 소스 파일이 있는지 확인하는 빠른 검사 역할을하는 기본 규칙 'all'이 추가되었습니다.