使用规则:
目录结构图如下所示。
phone:为项目名 Make后最后的可执行文件也为phone
src : 该目录下存放所有的.c文件
inc : 该目录下存放所有的.h文件
#Copyright (c) 2017 xiethon@126.com
#
# *DOCUMENTATION*
# 一个通用的Makefile模板
# $(notdir $(CURDIR)) 获取目录名
TARGET = $(notdir $(CURDIR))
CROSS_COMPILE = gcc
COMPILE.c = $(CROSS_COMPILE) -c
LINK.c = $(CROSS_COMPILE)
RM =rm
# $(wildcard src/*.c) :获取src/ 目录下的所有.c文件。
# $(wildcard inc/*.h) :获取inc/ 目录下的所有.h文件。
SOURCES = $(wildcard src/*.c)
HEADERS = $(wildcard inc/*.h)
# 静态模式规则。变量OBJFILES集合下的所有.c 替换成 .o文件
OBJFILES = $(SOURCES:%.c=%.o)
.PHONY:clean all install
#all:终极目标
all:$(TARGET)
@echo builded target:$^
@echo
#目标文件依赖规则
$(TARGET): $(OBJFILES)
@echo
@echo Linking $@ from $^...
$(LINK.c) -o $@ $^
@echo Link finished
#OBJFILES的依赖规则
$(OBJFILES): %.o:%.c
@echo
@echo Compiling $@ from $<...
$(COMPILE.c) -o $@ $<
@echo Compile finished
clean:
@echo Removing generated files...
@ -$(RM) -rf $(OBJFILES) $(TARGET) *~ *.d *.o
执行效果如下:
linux@ubuntu:/mnt/hgfs/01_Proj/svn/phone$ make
Compiling src/contact.o from src/contact.c…
gcc -c -o src/contact.o src/contact.c
Compile finished
Compiling src/list.o from src/list.c…
gcc -c -o src/list.o src/list.c
Compile finished
Compiling src/main.o from src/main.c…
gcc -c -o src/main.o src/main.c
Compile finished
Linking phone from src/contact.o src/list.o src/main.o…
gcc -o phone src/contact.o src/list.o src/main.o
Link finished
builded target:phone
Makefile源文件和测试项目地址:https://github.com/xiethon/Makefile