用于编译C/C++的一个通用Makefile文件

Ideal:在Linux C下,每当编写一些小程序或较大的项目时,都要进行重复的gcc编译命令,是否可以编写一个通用的Makefile文件,通过执行make命令实现编译(好像正是设计Makefile的意图之一,呵呵),了解相关Makefile编写规则后,初步实现了一个较为简单的Makefile文件,往后遇到实际的问题,将不断完善Makefile的功能。

这个Makefile主要针对GCC和GNU Make环境编写,其它版本的编译器和Make不能保证正常工作。

如果您发现本文中的错误,或者对本文有什么感想和意见,可以通过 jikhkhong AT gmail DOT com邮箱与作者联系。

以下是具体的实现过程:

实现的功能:

make——编译和连接程序 make objs——编译程序,生成目标文件 make clean——清除编译产生的目标文件(*.o)和依赖文件(*.d) make cleanall——清除目标文件(*.o)、依赖文件(*.d)和可执行文件(*.exe) make rebuild——重新编译连接程序,相当于make clean && makeUsage:

Makefile源代码

# Gneric C/C++ Makefile   ####################################################    PROGRAM :=   SRCDIRS :=   SRCEXTS :=   CPPFLAGS :=   CFLAGS :=   CFLAGS +=   CXXFLAGS :=   CXXFLAGS +=   LDFLAGS :=   LDFLAGS +=      SHELL = /bin/sh   SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))   OBJS = $(foreach x,$(SRCEXTS),\          $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))   DEPS = $(patsubst %.o,%.d,$(OBJS))      .PHONY: all objs clean cleanall rebuild      all : $(PROGRAM)      %.d : %.c       @$(CC) -MM -MD $(CFLAGS) {1}lt;      %.d : %.C       @$(CC) -MM -MD $(CXXFLAGS) {1}lt;      objs : $(OBJS)      %.o : %.c       $(CC) -c $(CPPFLAGS) $(CFLAGS) {1}lt;      %.o : %.cpp       $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) {1}lt;      $(PROGRAM) : $(OBJS)   ifeq ($(strip $(SRCEXTS)),.c)       $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)   else       $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS)   endif      -include $(DEPS)      rebuild: clean call      clean:       @$(RM) *.o *.d      cleanall: clean       @$(RM) $(PROGRAM) $(PROGRAM).exe  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwwfyx.html