一个通用的Makefile模板-转
2016-01-16 10:38
387 查看
使用前需要在当前目录下建立一个obj文件夹,用来存放中间文件。*.d文件中包含了对应*.c的依赖文件,*.o文件为对应*.c文件的目标文件。
详细的Makfile资料可以看看GNU make中文手册和跟我一起写Makefile
Makefile通用模板CC=gcc
CFLAGS=-Wall
OBJPATH=obj # .d文件和.o文件保存路径
TARGET=demo # 最终可执行文件
default: $(TARGET)
SOURCE=a.c b.c # 需要编译的.c文件
INCLUDE=
# 获取.d文件名集合
DEPS=$(addprefix $(OBJPATH)/, $(patsubst %.c, %.d, $(filter %.c, $(SOURCE))))
# 获取.o文件名集合
OBJS=$(addprefix $(OBJPATH)/, $(addsuffix .o, $(basename $(SOURCE))))
-include $(DEPS)
# 生成.d文件
$(OBJPATH)/%.d: %.c
$(CC) $(INCLUDE) -MM $< | sed "1s|^|$(dir $@)|" |"
sed "1{x;s|.*|$@: $<|;G;}" > $(basename $@).d
# 生成.o文件
$(OBJPATH)/%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<
# 链接成可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 清理
clean:
rm -rf $(OBJPATH)/*.d $(OBJPATH)/*.o $(TARGET)
详细的Makfile资料可以看看GNU make中文手册和跟我一起写Makefile
Makefile通用模板CC=gcc
CFLAGS=-Wall
OBJPATH=obj # .d文件和.o文件保存路径
TARGET=demo # 最终可执行文件
default: $(TARGET)
SOURCE=a.c b.c # 需要编译的.c文件
INCLUDE=
# 获取.d文件名集合
DEPS=$(addprefix $(OBJPATH)/, $(patsubst %.c, %.d, $(filter %.c, $(SOURCE))))
# 获取.o文件名集合
OBJS=$(addprefix $(OBJPATH)/, $(addsuffix .o, $(basename $(SOURCE))))
-include $(DEPS)
# 生成.d文件
$(OBJPATH)/%.d: %.c
$(CC) $(INCLUDE) -MM $< | sed "1s|^|$(dir $@)|" |"
sed "1{x;s|.*|$@: $<|;G;}" > $(basename $@).d
# 生成.o文件
$(OBJPATH)/%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<
# 链接成可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 清理
clean:
rm -rf $(OBJPATH)/*.d $(OBJPATH)/*.o $(TARGET)
相关文章推荐
- gdb 调试 入手 实例讲解-转
- PHP中的count对数组以及字符串统计
- GDB 调试命令讲解 2-转
- GDB 调试命令讲解-转
- C#中缓存数据库Memcached的基本使用方法
- Android键盘自动弹出解决方法分析
- 0-1背包、多重背包、钢条问题分析
- 求多项式相加的迭代算法
- Linux php.ini设置date.timezone=XXX为什么不生效?
- 用wget下载整个目录
- Linux C编程Makefile编写初步-转
- HDU 1243 反恐训练营
- Android环境搭建
- C中的预编译宏定义-转
- 使用GHOST打包制作gho镜像文件
- 飞龙的程序员书单 – Linux
- SSH方式使用root登陆ubuntu14.04
- LeetCode Unique Paths
- java与C#的比较
- Web项目演化系列--开启分布式(分离数据层)