Makefile錦集(持續更新中)

來源:互聯網
上載者:User
1、為每個源檔案產生一個可執行程式

使用情境:目錄下的所有源檔案都能產生可執行程式。如在做《C++ Primer》練習時,每個練習都是一個獨立的小程式,不必為每個練習編寫一個Makefile,也不必為每個練習執行g++編譯。

CC :=gcc CFLAGS := -g -Wall SOURCES := $(wildcard *.c)TARGETS := $(patsubst %.c,%,$(SOURCES))#define a functiondefine MAKE_EACH_SRC_BIN$1:$1.c$(CC) $(CFLAGS) $< -o $@endefall:$(TARGETS)$(foreach target,$(TARGETS),$(call MAKE_EACH_SRC_BIN $(target)))clean:rm -rf $(TARGETS)

2、通用性較強的Makefile

使用情境:可以應對大多數類型的工程,包含多個目錄的工程,不必為每個目錄編寫一個Makefile。自動產生標頭檔依賴,不必因改變標頭檔而make clean。

GROOT     :=$(shell pwd)PROGRAM   := ikedSRCDIRS   := . ./isakmp ./ikev1 ./cryptoSRCEXTS   := .c .ccCPPFLAGS  := -Wall -Werror -g -m32CFLAGS    :=  CFLAGS    += CXXFLAGS  := -I/usr/local/openssl/includeCXXFLAGS  += -I$(GROOT)/ -I$(GROOT)/isakmp -I$(GROOT)/crypto -I$(GROOT)/ikev1LDFLAGS   := -lpthread -L/usr/local/openssl/lib -lcrypto -ldlLDFLAGS   += -m32 #CC      = gcc #CXX     = g++ #CC      = $(CXX)  #CFLAGS  = $(CXXFLAGS) #RM        = rm -fSHELL   = /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 -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.C  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.cc  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.cpp  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.CPP  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.c++  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.cp  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@%.d : %.cxx  @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o $@objs : $(OBJS)  %.o : %.c  $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ %.o : %.C  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.cc  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.cpp  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.CPP  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.c++  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.cp  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.o : %.cxx  $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ $(PROGRAM) : $(OBJS)  ifeq ($(strip $(SRCEXTS)), .c)  # C file  $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)  else                            # C++ file  $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS)  endif  -include $(DEPS)  rebuild: clean all  clean :  @$(RM) $(OBJS) $(DEPS)  cleanall: clean  @$(RM) $(PROGRAM) $(PROGRAM).exe  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.