我是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具有“全部”目标(一个通用的默认目标),该目标依赖于“ 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
对象文件创建名为eecs338.o
的可执行文件的命令。因此,Makefile提供了一种使用可以稍后添加的规则将
eecs338.c
编译为eecs338
可执行文件的方法。希望这可以帮助!
关于makefile - 有人可以向我解释这个简单的makefile做什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35113737/