makefile - 有人可以向我解释一下这个简单的 makefile 的作用吗

标签 makefile c

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

相关文章:

具有多个规则共享相同配方的 Makefile

c - 以最少的指令获得最快的整数平方根

c++ - 有效地将 double 除以 2 的幂

C预处理器: stringize macro and identity macro

c - linux下如何创建makefile

makefile - 在 GNU Make 3.81 中保留先决条件的尾部斜杠

c - 如何将 char[ ] 转换为 char * ?

计算器程序需要输入两次+和-

objective-c - 将 Cocoa header 链接到 ruby​​ C 扩展

makefile - 从源列表生成文件自动生成目标