ENCE260 Makefile文件解析

在这个 Makefile 中,以下两行内容的含义是:
$(CC) $(CFLAGS) $^ -o $@ -lm:$(CC):这是一个变量,表示编译器,在这个文件中,它被定义为avr-gcc。$(CFLAGS):这是编译选项的变量。在这个文件中,它被定义为-mmcu=atmega32u2 -Os -Wall,表示编译时的选项。$^:这是一个自动化变量,表示所有的依赖文件。具体来说,它会列出当前目标文件(如tictactoe.out)所依赖的所有文件。-o $@:-o指定输出文件,$@是自动化变量,表示当前目标文件的名称(如tictactoe.out)。-lm:这个选项告诉编译器在链接阶段加入数学库(libm),这是标准的C语言数学库。
综合解释:这一行命令使用
avr-gcc编译依赖的源文件并生成可执行文件(目标文件),并链接数学库。$(SIZE) $@:$(SIZE):这是一个变量,表示要使用的工具,在这个文件中,它被定义为avr-size,是一个用来显示生成的二进制文件大小的工具。$@:如前所述,这是自动化变量,表示当前目标文件的名称。
综合解释:这一行命令使用
avr-size显示生成的可执行文件的大小信息。
因此,这两行的目的是编译项目生成目标可执行文件,并显示生成文件的大小。
在 Makefile 中,如果要把这部分写完整,可以参考以下的完整写法:
1 | tictactoe.out: tictactoe.o pio.o system.o led.o |
解释: 1. 目标文件:tictactoe.out 是目标文件,表示最终要生成的可执行文件。 2. 依赖文件:tictactoe.o pio.o system.o led.o 是目标文件所依赖的 .o 文件。 3. 编译命令: - 第二行指示使用编译器 avr-gcc 以及编译选项 $(CFLAGS),将依赖的 .o 文件链接生成最终的可执行文件 tictactoe.out,并且包含数学库 -lm。 - 第三行会使用 avr-size 工具显示生成的 tictactoe.out 文件的大小信息。
关键点: - $^ 会被替换为所有的依赖文件(在这里是 tictactoe.o pio.o system.o led.o)。 - $@ 会被替换为目标文件(在这里是 tictactoe.out)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Vincent's Blog!

