我是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/

10-14 07:08