举例一个makefile 的代码
时间: 2023-06-17 19:06:27 浏览: 52
下面是一个简单的 makefile 示例,它包含了一个目标文件和两个依赖文件:
```
CC = gcc
CFLAGS = -Wall -Wextra -Werror
all: program
program: main.o helper.o
$(CC) $(CFLAGS) -o program main.o helper.o
main.o: main.c helper.h
$(CC) $(CFLAGS) -c main.c
helper.o: helper.c helper.h
$(CC) $(CFLAGS) -c helper.c
clean:
rm -f program *.o
```
上述 makefile 中,首先定义了编译器和编译选项的变量。然后,定义了一个名为 `all` 的目标,它依赖另一个名为 `program` 的目标。`program` 目标依赖于 `main.o` 和 `helper.o` 两个文件,分别通过将它们编译成目标文件,然后将它们链接成可执行文件 `program`。`main.o` 和 `helper.o` 这两个文件分别依赖于 `main.c` 和 `helper.c`,并且都需要头文件 `helper.h`。最后,定义了一个名为 `clean` 的目标,用于清除生成的目标文件和可执行文件。
相关问题
举例说明makefile依赖文件
假设有以下三个文件:
- main.c:主程序源代码文件
- func.c:函数库源代码文件
- header.h:头文件,包含函数声明
那么,我们可以编写以下makefile:
```
CC = gcc
CFLAGS = -Wall -Werror
LDFLAGS = -lm
main: main.o func.o
$(CC) $(LDFLAGS) $^ -o $@
main.o: main.c header.h
$(CC) $(CFLAGS) -c $< -o $@
func.o: func.c header.h
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o main
```
这个makefile的作用是编译生成可执行文件main。其中,可执行文件main依赖于main.o和func.o两个目标文件,而这两个目标文件分别依赖于对应的源代码文件和头文件。在makefile中,我们用依赖关系的方式来描述这些文件之间的关系,从而告诉make工具如何生成目标文件和可执行文件。
如果我们修改了func.c文件,那么make工具会自动检测到main.o和func.o需要重新编译,从而重新生成可执行文件main。这样,我们就可以方便地管理和维护程序中的各个文件。
Makefile的PHONY举例说明
好的,PHONY是Makefile中的一个特殊目标,它表示一些伪目标,不对应真正的文件,仅用于执行一些特定的命令。下面是一个PHONY的例子:
```makefile
.PHONY: clean
clean:
rm -f *.o
```
这段Makefile代码中,我们定义了一个PHONY目标clean,用于删除所有的.o文件。因为clean不是真正的文件,因此我们需要在前面加上.PHONY来告诉make工具这是一个伪目标。当我们运行make clean时,它会执行rm -f *.o命令来删除所有的.o文件。需要注意的是,如果我们没有定义clean为PHONY目标,那么当我们有一个名为clean的文件时,make工具会认为我们要构建这个文件,而不是执行删除操作。因此,定义PHONY目标可以避免这种错误。