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!