当我们写一些大项目,有dh_make,debian包管理等手段,去自动编译打包。 但是当我们自己写一些小项目或者测试demo时,动手写Makefile,虽然不难却也繁琐。下面我提供一个通用Makefile。
1.编写通用实例:
├── add
│ ├── add_float.c
│ ├── add.h
│ └── add_int.c
├── main.c
├── Makefile
└── sub
├── sub_float.c
├── sub.h
└── sub_int.c
Makefile:
内置:CC=cc,RM=rm -f
下面两例,只需输入工程下的文件夹名称和可执行文件名即可。
注意:直接copy格式可能变动,开头空白是TAB而不是空格。
常规Makefile:
TARGET = cacu
DIR = sub add
DIRS = $(DIR) .
CFLAGS = -O2 $(patsubst %, -I%, $(DIR))
FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
OBJS = $(patsubst %.c,%.o,$(FILES))
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS)
clean:
-$(RM) $(TARGET) $(OBJS) #‘-’表示失败时不报错继续执行。
DIY去.o文件Makefile:
TARGET = test
DIR = sub add
OBJSDIR=.objs
#VPATH=add:sub:.
DIRS = $(DIR) .
CFLAGS = -O2 $(patsubst %, -I%, $(DIR))
FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
OBJS = $(patsubst %.c,%.o,$(FILES))
$(TARGET): $(OBJSDIR) $(OBJS)
$(CC) -o $(TARGET) $(patsubst %, $(OBJSDIR)/%/*.o, $(DIR)) $(OBJSDIR)/*.o $(CFLAGS)
$(OBJS):%.o:%.c
$(CC) -c $(CFLAGS) $< -o $(OBJSDIR)/$@
$(OBJSDIR):
mkdir -p $(patsubst %, ./$(OBJSDIR)/%, $(DIR))
clean:
-$(RM) -r $(TARGET) $(OBJS) $(OBJSDIR)
see also:http://www.gnu.org/software/make/manual/make.html
http://www.cnblogs.com/DanielZheng/archive/2011/08/09/2132424.html