Makefile의 내용은 단순하게 입력하면 하나 이상의 대상 (빌드하려는 것)입니다. 각 대상에는 종속성이 있습니다 (종속성이 아직없는 경우 빌드해야하며 대상은 존재하지만 대상보다 새로운 경우 대상을 다시 작성해야 함) 및 규칙 (대상을 빌드하는 명령, 아마도 의존성으로부터).
최종 결과물이 program
이라는 프로그램이라고 가정 해 보겠습니다. 빌드 할 소스를 찾았지만 소스에서 직접 실행 파일을 빌드하지 않으면 오브젝트 파일에서 직접 빌드 할 수 있습니다. 이처럼 메이크를 시작할 수 : 규칙 라인에
program: ppm.o error.o erato.o
cc -o program ppm.o error.o erato.o
경고 간격은 (위의 cc
명령 행)는 TAB뿐 아니라 공간이 필요합니다!
시작하기에 충분하지만 옳기에 충분하지 않습니다. .o의 종속성/규칙은 아직 목표가 없다는 것을 알게 될 것입니다. 그러나 Make는 몇 가지 기본 규칙을 가지고 있기 때문에 여전히 작동합니다.
이 makefile을 사용하면 "make"를 두 번 입력하면 처음에는 모든 것이 빌드되고 두 번째로는 변경되지 않습니다. 아무런 변화가 없으므로 다시 빌드 할 필요가 없습니다.
program: ppm.o error.o erato.o
cc -o program ppm.o error.o erato.o
ppm.o: ppm.c my-bit-vector.h error.h
error.o: error.c error.h
erato.o: erato.c my-bit-vector.h error.h
이제 당신이있어 의존성이 헤더를 다시 작성해야 소스를 재 구축 할 수 있도록 원인 설정 : 당신은 지금 당신의 .H 년대를 편집 불행히도 경우가 .c 년대는 여전히 그 문제를 해결 할 수 있습니다, 다시하지 않을 것이다 변화. 이러한 소스 빌드에는 내장 규칙이 (종종) 충분하기 때문에 규칙이 없습니다. 물론 내장 된 것을 덮어 쓸 수 있습니다.
"make"를 입력하면이 도구는 첫 번째 대상 (프로그램)을 찾고 해당 종속성을 검사합니다. 그런 다음 종속성을 빌드 할 필요가있는 대상이있는 한 각각의 종속성이 최신인지 (대상에 따라 달라짐 : 종속성/규칙 정의) 재귀 적으로 확인합니다. 마지막으로 빌드를 완료하기 위해이 대상에 대한 규칙을 적용합니다.
makefiles로 할 수있는 내용이 개 더 있습니다.이 내용은 간단한 소개입니다.
출처
2014-03-25 13:44:37
mah
어느 것이'main' 함수를 포함합니까? 그리고이 모든 파일들이 하나의 디렉토리에 함께 있습니까? – patrickvacek
@patrickvacek 왜'main() '을 포함하는 소스가 중요한가요? – mah
main()은 ppm.c에 있으며 파일은 함께 있습니다. – imre