프로젝트의 소스 파일은 유형, 기능, 모듈에 따라 여러 디렉터리에 배치됩니다. Makefile은 어떤 파일이 필요한지 지정하는 일련의 규칙을 정의합니다. 먼저 컴파일해야 하는 파일, 사후 컴파일해야 하는 파일, 재컴파일해야 하는 파일 및 훨씬 더 복잡한 기능 작업을 수행할 수 있습니다.
그래서 makefile이 가져오는 이점은 "자동 컴파일"입니다. 일단 작성되면 make 명령 하나만 필요하며 전체 프로젝트가 완전히 자동으로 컴파일되므로 소프트웨어 개발 효율성이 크게 향상됩니다.
make는 makefile의 명령을 해석하는 명령 도구입니다. 일반적으로 Delphi의 make, Visual C++의 nmake 및 Linux의 GNU make와 같은 대부분의 IDE에는 이 명령이 있습니다. makefile이 엔지니어링 분야의 컴파일 방법이 되었음을 알 수 있습니다. make는 명령어이고 makefile은 파일로 함께 사용하면 프로젝트의 자동화된 구축을 완성할 수 있습니다.
의존성과 의존성 방식을 이해하기 전에 먼저 C언어로 작은 프로그램을 작성해 보겠습니다.
make.c 파일을 생성하고 hello make 코드를 작성했습니다.
그럼 또 다른 Makefile을 만들어 보겠습니다. (makefile도 가능하지만 권장하지는 않습니다.)
그런 다음 Makefile을 편집하고 다음 코드를 작성합니다.
그런 다음 저장하고 종료합니다.
그런 다음 make 명령을 실행할 수 있습니다. make가 존재하지 않는다는 메시지가 표시되면 make가 설치되지 않았기 때문입니다. 루트로 설치하도록 전환할 수 있습니다. 설치 코드: yum install make
또는 sudo install make
. yum install make
或者 sudo install make
。
正常执行make后会出现如下显示。
然后我们ll来查看当前目录下的文件。
我们可以发现多了一个可执行程序make。那我们运行用 ./make
运行试试。
我们会发现这个可执行程序输出make。
这就是我们的自动化构建工具,只需要在Makefile里面配置一下。往后直接输入make即可编译代码。那我们再输入一次make试试。
提示我们 make程序是最新的。 也就是说,如果你没有修改或者更新程序的话。 那么则不会为你编译,因为你程序都没动呀,编译它干嘛。
那么此时我们回过来分析一下 Makefile里面写的代码。
首先我们把它分为三部分
make
make.c
gcc make.c -o make -std=c99
这三者的关系就是, make
是依赖于 make.c
产生的。 它们两者有依赖关系 , 而gcc make.c -o make -std=c99
则是 make 依赖于 make.c的方法,叫依赖方法。
什么是依赖关系和依赖方法?
打个比方。
月底了,你的生活费用光了。 这个时候你给你爸爸打电话,和他说:“爸,月底了。我没钱了。"。此时你的爸爸就知道了,会给你打生活费。 这里面,你和你的父亲是父子关系,所以你依赖于你的父亲,你们之间有依赖关系。而你的父亲给你生活费,这是你依赖父亲的一种方式,所以这就是依赖方法。如果此时你给你室友的父亲打电话要生活费,他会直接让你滚。因为你们根本不构成依赖关系,不构成依赖关系就没有依赖方法。
所以我的程序也是一样的。 make 是生成的可执行程序。 而它依赖于make.c,因为它是从 make.c编译来的。而依赖方法则是 执行 gcc make.c -o make -std=c99
그런 다음 현재 디렉터리의 파일을 살펴보겠습니다.
추가로 실행 가능한 프로그램 make가 있는 것을 확인할 수 있습니다. 그럼
./make
를 실행해 보겠습니다.- 🎜 우리는 이 실행 가능한 프로그램 출력을 발견할 것입니다. 🎜🎜이것은 자동화된 빌드 도구이므로 Makefile에서 구성하기만 하면 됩니다. 그런 다음 직접 make를 입력하여 코드를 컴파일합니다. 그런 다음 다시 make를 입력해 보겠습니다. 🎜🎜🎜🎜 우리에게 물어보세요 make 프로그램이 최신 버전입니다. 즉, 프로그램을 수정하거나 업데이트하지 않은 경우입니다. 그러면 프로그램이 수정되지 않았기 때문에 컴파일되지 않습니다. 그런데 왜 컴파일합니까? 🎜🎜이제 Makefile에 작성된 코드를 다시 분석해 보겠습니다. 🎜🎜🎜🎜 먼저 세 부분으로 나눕니다🎜🎜
make
🎜🎜make.c
🎜🎜gcc make.c -o make -std=c99
🎜 🎜 이 세 가지의 관계는make
가make.c
에 종속된다는 것입니다. 둘은 🎜종속성 관계🎜를 갖고 있으며,gcc make.c -o make -std=c99
는 make.c에 의존하는 make의 방법인데, 이를 🎜종속성 방법🎜이라고 합니다. . 🎜🎜🎜종속성과 종속성 방법이란 무엇입니까?🎜🎜🎜비유입니다. 🎜🎜월말인데 생활비가 없어졌어요. 이때 아버지에게 전화해서 "아빠, 이제 월말인데 돈이 없어요"라고 말씀하세요. 이때 아버님이 아시고 생활비를 주실 것이다. 여기서 당신과 당신의 아버지는 부자 관계이므로 당신은 아버지에게 의존하고 있고, 당신 사이에는 🎜의존 관계🎜가 있습니다. 그리고 아버지가 생활비를 지원해주는 것이 아버지에게 의지하는 방법이므로 이것이 🎜의존방법🎜입니다. 이때 룸메이트 아버지에게 전화해 생활비를 달라고 하면 나가라고 한다. 종속 관계가 전혀 없기 때문에 종속 관계가 없으면 종속 방법도 없습니다. 🎜🎜🎜🎜 그래서 저는 절차는 동일합니다. make는 생성된 실행 프로그램입니다. 그리고 make.c에서 컴파일되었기 때문에 make.c에 의존합니다. 종속성 방법은gcc make.c -o make -std=c99
명령을 실행하는 것입니다. 🎜🎜🎜종속성의 원칙🎜🎜🎜🎜🎜🎜make는 현재 디렉터리에서 "Makefile" 또는 "makefile"이라는 이름의 파일을 찾습니다. 🎜찾으면 파일에서 첫 번째 대상 파일(target)을 찾습니다. 위의 예에서는 "hello" 파일을 찾아 이 파일을 최종 대상 파일로 사용합니다.
hello 파일이 존재하지 않거나 hello가 의존하는 후속 test.o 파일의 파일 수정 시간이 테스트 파일보다 최신인 경우(터치하여 테스트할 수 있음) 정의된 명령을 실행합니다. 나중에 테스트 파일을 생성합니다.
테스트가 의존하는 test.o 파일이 존재하지 않으면 make는 현재 파일에서 test.o 파일의 종속성을 찾습니다. 발견되면 그에 따라 test.o 파일을 생성합니다. 그 규칙에. (이것은 약간 스택 프로세스와 같습니다.)
물론 C 파일과 H 파일이 존재하므로 make는 test.o 파일을 생성한 다음 test.o 파일을 사용하여 make의 최종 작업을 선언합니다. , 또한 파일 테스트를 실행하십시오.
이것은 전체 make의 종속성입니다. Make는 첫 번째 대상 파일이 최종적으로 컴파일될 때까지 계층별로 파일 종속성을 찾습니다.
검색 프로세스 중에 오류가 발생하면(예: 마지막 종속 파일을 찾을 수 없으면 make가 직접 종료되고 정의된 명령에 오류가 있거나 컴파일에 실패하면 make Ignore) 전혀.
make는 파일 종속성에만 관심이 있습니다. 즉, 종속성을 찾은 후에도 콜론 뒤의 파일이 여전히 없으면 죄송합니다. 작동하지 않습니다.
보통 코드를 작성할 때, 코드를 반복적으로 컴파일하고 실행해야 하는 경우가 많습니다.
다음번 재컴파일 전, 지난번 생성된 실행 프로그램을 정리해야 합니다. 하지만, 정리 과정에서 실수를 하고, 실수로 원본 파일을 삭제하게 되어 다시 문제가 발생할 수 있습니다.
그래서 해결책이 있나요? 대답은 물론입니다.
계속해서 Makefile을 편집해 보겠습니다.
원본에
.PHONY:clean clean: rm -f make
를 추가했습니다. 그러면 PHONY는 무엇을 합니까?
.PHONY
는 의사 대상을 수정하며 의사 대상은 항상 실행됩니다. clean은 자체 정의된 make 명령입니다. 사용 방법은 make clean
.PHONY
修饰的是一个伪目标的,伪目标总是被执行的。clean是自己定义的一条make指令,使用方法为 make clean
那我们来试试吧这条指令
我们可以看到它被清理了,那为什么说伪目标它总是被执行的呢?我们多次执行它看看。
我们可以一直执行它,那么我们多次执行make
呢?
我们会发现,make执行了一次,就无法执行了,因为没有被.PHONY
修饰。那么我用.PHONY
修饰它再试试。
然后我们保存退出,多次执行make
我们就可以看到它被多次执行了。但我觉得没有这个必要,因为文件没有被修改的话。重新编译没有意义,所以自动化编译不建议加上.PHONY
我们保存退出,多次执行make
我们就可以看到它被多次执行了。但我觉得没有这个必要,因为文件没有被修改的话。重新编译没有意义,所以自动化编译不建议加上.PHONY
make
를 여러 번 실행하면 어떻게 될까요? 🎜🎜🎜🎜 make를 한 번 실행한 후 .PHONY
에 의해 수정되지 않았기 때문에 실행할 수 없는 것으로 확인되었습니다. 그런 다음 .PHONY
로 수정하고 다시 시도합니다. 🎜🎜🎜🎜 그런 다음 저장하고 종료하고 make
🎜🎜🎜🎜여러 번 실행되는 것을 확인할 수 있습니다. 하지만 파일이 수정되지 않았기 때문에 이것이 필요하다고 생각하지 않습니다. 재컴파일은 의미가 없으므로 자동 컴파일에 .PHONY
를 추가하는 것은 권장하지 않습니다🎜🎜저장하고 종료한 후 make
를 실행합니다🎜🎜🎜🎜여러 번 실행되는 것을 확인할 수 있습니다 타임스. 하지만 파일이 수정되지 않았기 때문에 이것이 필요하다고 생각하지 않습니다. 다시 컴파일할 필요가 없으므로 자동 컴파일을 위해 .PHONY
를 추가하는 것은 권장하지 않습니다🎜위 내용은 Linux 자동화 빌드 도구 make 및 Makefile을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!