我是 C 和 Make 新手,想知道是否有人可以帮助我解释这段代码的作用。
CC = gcc
C_FLAGS = -Wall -Wextra
all: eecs338
eecs338: eecs338.o
$(CC) eecs338.o -o eecs338
eecs338.o: eecs338.c
$(CC) -c $(C_FLAGS) eecs338.c
clean:
rm -f eecs338 eecs338.o
最佳答案
Makefile 通常是这样组织的:
target: dependency
actions
其中目标只是一个标签,依赖是另一个目标(或文件;这可以是很多东西),操作是一旦满足依赖关系,就为该目标运行命令。
因此,您的 Makefile 具有“all”目标(一般默认目标),该目标依赖于“eecs338_hw01”,并且没有任何操作。 “eecs338_hw01”本身就是一个目标,并且它依赖于“eecs338.o”。现在这个“eecs338.o”是一个文件名(并且它是一个目标); .o
扩展名用于目标文件,这通常意味着它是从例如 .c
编译而来的文件。
查看“eecs338.o”目标,我们发现它依赖于“eecs338.c”文件。这告诉 make
查看该依赖文件是否存在。 并且这个“eecs338.o”目标有一些操作,即执行将eecs338.c
编译为eecs338.o
的命令。
生成 eecs338.o
文件后,它就满足“eecs338_hw01”目标的依赖关系,然后该目标运行其操作:创建名为的可执行文件的命令来自 eecs338.o
目标文件的 eecs338
。
因此,您的 Makefile 提供了一种使用稍后添加的规则将 eecs338.c
编译为 eecs338
可执行文件的方法。
希望这有帮助!
关于makefile - 有人可以向我解释一下这个简单的 makefile 的作用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113737/