Makefile的语法结构
Makefile是一种用于自动化编译和构建程序的工具,它使用一种简单的文本格式来描述如何从源代码文件生成可执行文件,Makefile的语法结构主要包括以下几个部分:
1、变量和函数
Makefile中定义了一系列的变量和函数,这些变量和函数在构建过程中起到了关键的作用,CC、CFLAGS、LDFLAGS等变量分别表示编译器、编译选项和链接选项;$(info ...)、$(warning ...)等函数用于输出信息和警告。
2、目标和依赖关系
Makefile中的每个目标都是由一个或多个依赖文件组成的,目标文件是最终需要生成的文件,而依赖文件是需要先被编译的目标,Makefile中通过如下格式来描述目标和依赖关系:
target: dependencies
$(target): $(dependencies)
$(target): $$@
第一个冒号后面的target表示目标文件,第二个冒号后面的dependencies表示依赖文件,第三个冒号后面的target表示伪目标(通常是由命令构成的),第四个冒号后面的dependencies表示该伪目标的依赖文件,最后一个冒号表示如果前面的命令执行失败,则执行后面的命令。
3、命令序列
Makefile中的命令序列用于指定如何生成目标文件,命令序列通常以Tab键开头,后面紧跟着要执行的命令。
gcc -o myprog myfile1.c myfile2.c
这个命令序列表示使用gcc编译器将myfile1.c和myfile2.c编译成名为myprog的可执行文件。
4、注释
Makefile中的注释用于对整个文件或者某个命令序列进行说明,注释可以用井号()开头,也可以用感叹号(!)开头。
This is a comment about the target rule
%.o: %.c
Compile the C source file into an object file
$(CC) -c $< -o $@
Link the object files into an executable file
$(CC) -o $@ $^ $(LDFLAGS)
Makefile的使用示例
下面是一个简单的Makefile示例,用于编译一个包含main.c和helper.c的程序:
编译器和编译选项 CC = gcc CFLAGS = -Wall -g 链接选项和库文件路径 LDFLAGS = -lm 目标和依赖关系 TARGET = myprogram OBJS = main.o helper.o 命令序列和伪目标 all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) 伪目标,不需要执行任何命令,只是用来方便地创建依赖关系 .PHONY: clean run test install uninstall help info version-infos update-infos \tconfig config-help config-add config-delete config-info \tversion-info version-help version-add version-delete version-infos \tupdate-info update-help update-add update-delete update-infos \tcheck check-help check-add check-delete check-info \thelp help-about help-add help-delete help-info tinfo info-about info-add info-delete info-info \tversion version-about version-add version-delete version-info \tupdate update-about update-add update-delete update-info \ttest test-about test-add test-delete test-info \tinstall install-about install-add install-delete install-info \tunit uninstall uninstall_pkg uninstall_pkg_confirm \tclean clean_pkg clean_pkg_confirm clean_src clean_objs \tdistclean distclean_pkg distclean_pkg_confirm distclean_src distclean_objs \thelp_pkg help_pkg_about help_pkg_intro help_pkg_options help_pkg_usage \trun_tests run_tests_default run_tests_debug run_tests_profile run_tests_release \ttest_pkg test_pkg_about test_pkg_intro test_pkg_options test_pkg_usage \trun_tests test_pkg test_pkg_default test_pkg_debug test_pkg_profile test_pkg_release tcheck_pkg check_pkg_about check_pkg_intro check_pkg_options check_pkg_usage \trun check check_pkg check_pkg_default check_pkg_debug check_pkg_profile check_pkg_release \tinstall install installdir INSTALLDIRS... FILES... DESTDIR... INSTALLDIRS = lib share src doc bin include etc directories to be installed to (may be overridden with -D) FILES = Makefile makefile used to build this package (may be overridden with -f) DESTDIR = @DESTDIR@ destination directory; default is current directory (may be overridden with -d)
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/156704.html