linux中有fun1.c,fun2.c,fun3.c,main.c,编写makefile文件使其能在main.c中调用fun1,fun2,fun3
时间: 2024-03-08 11:49:05 浏览: 165
好的,以下是makefile文件的编写方法:
```makefile
# 定义编译器
CC = gcc
# 定义编译选项
CFLAGS = -Wall -Werror
# 定义源文件和目标文件
SRCS = fun1.c fun2.c fun3.c main.c
OBJS = $(SRCS:.c=.o)
# 定义目标程序名称
TARGET = main
# 编译规则
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
# 每个源文件生成对应的目标文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清除规则
clean:
rm -f $(OBJS) $(TARGET)
```
解释一下每个部分:
- `CC` 是定义编译器的变量,这里使用 `gcc`;
- `CFLAGS` 是定义编译选项的变量,这里加上了 `-Wall` 和 `-Werror`,意思是开启所有警告,并将警告视为错误;
- `SRCS` 是定义源文件的变量,这里包括 `fun1.c`, `fun2.c`, `fun3.c`, `main.c`;
- `OBJS` 是定义目标文件的变量,这里将 `.c` 后缀替换为 `.o` 后得到;
- `TARGET` 是定义目标程序名称的变量,这里命名为 `main`;
- `all` 是默认的目标,即执行 `make` 命令时默认执行的内容,这里是编译 `$(TARGET)`;
- `$(TARGET)` 是目标程序,依赖于 `$(OBJS)`,即 `fun1.o`, `fun2.o`, `fun3.o`, `main.o`,这里使用 `$(CC)` 和 `$(CFLAGS)` 编译链接这些目标文件;
- `%.o: %.c` 是一条模式规则,表示每个 `.c` 文件都可以生成对应的 `.o` 文件,依赖于 `.c` 文件,使用 `$(CC)` 和 `$(CFLAGS)` 编译生成;
- `clean` 是清除目标文件和目标程序的规则,执行 `make clean` 命令时执行,使用 `rm` 命令删除目标文件和目标程序。
使用方法:
1. 将上述代码保存到名为 `Makefile` 的文件中;
2. 在终端中进入源文件所在的目录;
3. 执行 `make` 命令编译生成目标程序;
4. 执行 `./main` 命令运行目标程序;
5. 如果需要清除目标文件和目标程序,可以执行 `make clean` 命令。
阅读全文