在一个工程项目中,结构如下:主文件main.c位于工程目录下,子文件add.c位于add目录下,子文件sub.c位于sub目录下。main.c会调用add.c、sub.c里的函数;请帮我写下这个工程的makefile文件?
时间: 2024-10-19 13:11:56 浏览: 11
在一个简单的工程项目中,Makefile是一个文本文件,用于描述如何从源代码构建目标程序。对于你提到的目录结构,Makefile的内容可能会类似这样:
```makefile
# Makefile for a project with main.c and separate subdirectories
CC = gcc # 编译器
CFLAGS = -std=c99 -I./add -I./sub # 指定头文件路径和编译选项
# 定义目标文件
main: main.o add.o sub.o
$(CC) $(CFLAGS) -o main main.o add.o sub.o
# 定义每个源文件的规则
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则,删除生成的中间文件
clean:
rm -f *.o main
# 添加清理规则到默认目标
.PHONY: clean
all: main # 默认目标是构建项目
```
在这个Makefile中:
- `main` 链接了 `main.o`, `add.o`, 和 `sub.o`,这需要你在对应的源文件里先包含必要的头文件并声明函数。
- `%.o: %.c` 是通配符规则,当有.c文件被修改时,它会自动编译生成对应的.o文件。
- `clean` 目标清除所有生成的.o和main文件。
- `.PHONY:` 是告诉Make系统"clean"不是一个依赖于文件的实际目标。
记得替换`.CC`, `.CFLAGS`等变量以匹配你的实际环境。运行`make`即可按照Makefile的规则进行编译和链接。
阅读全文