个人Makefile写法总结

来源:互联网 发布:wp10 软件开发 编辑:程序博客网 时间:2024/06/05 03:00

个人Makefile写法总结

我想只要是做过linux C开发的程序员一定对makefile不会陌生,但是可能大部分都停留在写一些简单的makefile或者说简单项目的makefile,本人就是这种状态,对于复杂的makefile可能都看不懂再干什么,有很多不理解的地方,做为一个linux c开发我感觉是有点说不过去的,所以我最近就研究了一下makfile的写法并结合了项目中的用法总结如下:

#主Makefile模板include xxx   #Make.rule路径TARGET = xxx  #生成的程序名xxx_PATH = xxx #源文件路径(需要定义所有的源文件路径)...SUBDIRS = xxx_PATH \            ....PHONY : all clean all: subtarget  $(TARGET)subtarget:    @for dir in SUBDIRS; do \        (cd dir && $(MAKE) subtarget -f Makefile) || exit 1; \    doneclean:    @for dir in SUBDIRS; do \        (cd dir && $(MAKE) clean -f Makefile) || exit 1; \    done    -rm -rf $(TARGET)xxx_OBJ = $(patsubst %.c,%.o,$(wildcard $xxx_PATH/*.c))...SUBOBJS = xxx_OBJ \            ...$(TARGET):$(SUBOBJS)    $(CC) $(CFLAGS) -o $@ $^ $(LIBS)$(SUBOBJS):$(subtarget)

接下来,需要定义一个通用的规则,包括库、头文件、编译选项以及如何编译子目录的源文件,Make.rule内容如下:

#Make.rule模板CC = gcc CFLAGS = -fPIC -g -Wall $(INCLUDE)INCLUDE = -I xxx ...LIBS = -L xxx -lxxx ...OBJ = $(patsubst %c,%o,$(SRC))$(OBJ):$(SRC)    $(CC) $(CFLAGS) -c $^

子目录makefile内容如下:

#子Makefile模板include xxx #Make.rule路径TARGET = $(OBJ)SRC = xxx ...#源文件列表,例如,main.c init.c ....PHONY: all cleanall: $(TARGET)clean:    -rm -rf xxx.osubtarget: $(TARGET)
0 0
原创粉丝点击