Makefile은 Linux 시스템에서 일반적으로 사용되는 파일 형식으로, 프로그램의 컴파일 프로세스와 종속성을 설명하는 데 사용할 수 있으므로 사용자는 make 명령을 사용하여 프로그램을 쉽게 빌드하고 관리할 수 있습니다. Makefile의 구문과 규칙은 비교적 간단하지만 주의해야 할 몇 가지 세부 사항과 특별한 경우가 있습니다. 그렇지 않으면 컴파일이 실패하거나 예상치 못한 결과가 발생할 수 있습니다. 이 기사에서는 Linux Makefile의 몇 가지 일반적인 오류와 함정, 이를 방지하고 해결하는 방법을 소개하여 Linux에서 Makefile을 더 잘 사용하고 작성할 수 있습니다.
결과: 변수의 값은 사용자가 할당한 값이 아니지만 값과 주석 문자 사이의 공백이 변수에 할당되어 있어 사용자의 의지에 반하여 실행되고 감지하기가 쉽지 않습니다.
예제 설명은 다음과 같습니다. (Makefile 버전: GNU MAKE 3.81):
으아아아 으아아아확장 1: 사실 확인 프로세스는 ifeq() 문의 트랩인 또 다른 트랩으로 이어집니다. 트랩 2를 참조하세요.
확장 2: 변수 할당 문에 이 트랩이 있습니다. 매크로 정의 문은 어떻습니까? 및 다음과 유사한 문장
실제 테스트 결과, 소스 파일의 매크로 정의 "TMP" 값과 "INCFLAGS" 경로 값에는 영향을 미치지 않는 것으로 나타났습니다.
경험치: 위의 검증을 통해 주석은 Makefile 파일 내부에 정의된 변수의 값에 영향을 주지만 -D 및 -I 이후의 값에는 영향을 미치지 않습니다. 따라서 유사한 문제를 피하기 위해 Makefile의 주석은 명령문 뒤가 아닌 명령문 앞 줄에 작성하는 것이 좋습니다.
예제 설명은 다음과 같습니다. (Makefile 버전: GNU MAKE 3.81):
으아아아실제 테스트에 따르면 $(TmpDir) 뒤의 몇 개의 공백은 효과가 없지만 /Source 뒤의 공백은 영향을 미치는 것으로 나타났습니다
경험:Makefile에서는 공백 여부 등 매개변수의 일관성을 보장하는 것이 가장 좋습니다. C 언어와 같은 언어로 프로그래밍하는 것만큼 느슨하지 않습니다.
예제는 대략 다음과 같습니다.
으아아아클릭하여 .d 종속 파일 관련 내용 소개를 입력하세요
실제로 결과를 보면 .d 종속 파일에 문제가 있음을 대략적으로 추론할 수 있습니다. 파일을 다시 작성하려면 .d 종속 파일이 제공해야 하는 기능인 재컴파일이 필요하기 때문입니다.
陷阱:目标路径的问题,即同一文件目标的引用时要保持路径一致。mingw环境下,windows路径(e.g. c:\agc.o) 和 mingw路径(/c/agc.o)都能够识别,对于make而言, c:\abc.o 和 /c/abc.o 是两个不同的目标。若要是不知道这一知识要点,很难发现 .d 文件开头 c:\ 和 /c/ 的区别。(个人疑点:同一环境,不同工程,有些生成的.d依赖文件中.o目标路径和make中引用的路径是一样的,目前也不知是什么原因,总之这个陷阱还是存在的。)
实例陷阱说明:
#以下行将导入所有的.d依赖文件的内容,即以 /c/...开头的内容 -include $(APPDEPS) #而以下目标依赖关系中,指明目标的路径则是以 c:\...开头的路径 $(DEV_BLD_DIR)/%.o: %.c #其结果就是导致了因路径表示的不同,而认为不是同一目标的情况出现 #使得make不能找到.o目标文件依赖的所有依赖源文件,其中包括.h头文件 #自然而然,也就不能因为.h文件的更新,而重新编译对应的.c文件来生成.o文件
解决方法:
既然知道了陷阱所在,就可以利用如下命令来解决该问题:
#通过增加sed命令,把生成的.d依赖文件中的.o目标路径改写就可以了。 $(DEV_BLD_DIR)/%.o: %.c $(info Compiling $$@) $(CFLAGS) $(INCFLAGS) $'s,.*\.o[ :]*,$@:,g' $(DEV_BLD_DIR)/$*.d;\ rm -f $(DEV_BLD_DIR)/$*.d.tmp @echo
通过本文,你应该对 Linux Makefile 中的一些注意事项有了一个基本的了解,知道了如何避免和解决一些常见的错误和陷阱,如变量赋值、条件判断、目标文件、伪目标、自动变量等。你也应该明白了 Makefile 的作用和优点,以及如何在 Linux 下正确地使用和编写 Makefile。我们建议你在使用 Makefile 时要遵循一些规范和习惯,如使用缩进、注释、通配符等,以提高 Makefile 的可读性和可维护性。同时,我们也提醒你在使用 Makefile 时要注意一些潜在的问题和挑战,如跨平台、并行编译、递归调用等。希望本文能够帮助你更好地使用 Linux 系统,让你在 Linux 下编写出高效和优雅的 Makefile。
위 내용은 Linux Makefile 해야 할 것과 하지 말아야 할 것: 일반적인 실수와 함정을 피하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!