1:編譯可執行程序。2:編譯lib庫 3:編譯so庫
在linux下面,我們不得不自己寫makefile,makefile的確博大精深,但是實際上對於日常的使用來說,無非就是1:編譯可執行程序。2:編譯lib庫 3:編譯so庫本博針對上面三種目的各自寫出了makefile模版,希望對大家有所幫助。一.編譯可執行程序當前目錄下制定文件編譯成可執行文件(連接外部庫的話只需要更改INC和LIB即可)
CXX = g++TARGET = bitmaploctestC_FLAGS += -g -WallLIB_FLAGS = -pthreadall: $(TARGET)bitmaploctest: bitmaploctest.o bitmaploc.o file_lock.o$(CXX) -o $@ $^ $(LIB_FLAGS) $(LIB) $(C_FLAGS).cpp.o:$(CXX) -c -o $*.o $(INC) $(C_FLAGS) $*.cpp.cc.o:$(CXX) -c -o $*.o $(INC) $(C_FLAGS) $*.ccclean:-rm -f *.o $(TARGET)
二.編譯成lib庫當前目錄下指定文件編譯成lib庫(一般lib庫在編譯的時候不會將使用的外部庫編譯進來,而是等編譯成可執行程序時或者.so時)
INC_DIR= ./SRC_DIR= ./OBJ_DIR= ./LIB_DIR= ./H_DIR= ./OBJ_EXT= .oCXXSRC_EXT= .cppCSRC_EXT= .cLIB_EXT= .aH_EXT= .hOBJECTS = $(OBJ_DIR)bitmaploc$(OBJ_EXT) $(OBJ_DIR)file_lock$(OBJ_EXT)LIB_TARGET = $(LIB_DIR)libbitmaploc$(LIB_EXT)$(OBJ_DIR)%$(OBJ_EXT): $(SRC_DIR)%$(CXXSRC_EXT)@echo@echo 「Compiling $< ==> $@…」$(CXX) $(INC) $(C_FLAGS) -c $< -o $@$(OBJ_DIR)%$(OBJ_EXT): $(SRC_DIR)%$(CSRC_EXT)@echo@echo 「Compiling $< ==> $@…」$(CC) -I./ $(INC) $(C_FLAGS) -c $< -o $@all:$(LIB_TARGET)$(LIB_TARGET): $(OBJECTS)all: $(OBJECTS)@echo$(AR) rc $(LIB_TARGET) $(OBJECTS)@echo 「ok」clean:rm -f $(LIB_TARGET) $(OBJECTS)
三.編譯成so庫當前目錄下指定文件編譯成so庫(必須將所有引用的外部庫都編譯進來)
CC = gccCXX = g++CFLAGS= -Wall -pipe -DDEBUG -D_NEW_LIC -g -D_GNU_SOURCE -shared -D_REENTRANTLIB= -lconfig -ldl -lrt -L../../lib -lttc -gINCLUDE = -I../spp_incOO= service.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o uin_conf.o stat.oTARGETS = ../../lib/libRanch.soall: $(TARGETS)stat:tool_stat.cpp$(CXX) $(INCLUDE) tool_stat.cpp -o tool_stat stat.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o -gcp tool_stat ../../bin$(TARGETS): $(OO)$(CXX) $(CFLAGS) $(INCLUDE) $(OO) -o $@ $(LIBDIR) $(LIB).c.o:$(CC)$(CFLAGS) -c $(INCLUDE) $<echo $@.cpp.o:$(CXX) $(CFLAGS) -c $(INCLUDE) $<echo $@%:%.c$(CC) $(CFLAGS) -o $@ $< $(OO) $(LDFLAGS)echo $@clean:rm -f *.orm -f $(TARGETS)rm -f tool_stat
OK,我常用的makefile也就這三種格式,希望對大家有用。
推薦閱讀:
※梭羅和隱逸的《瓦爾登湖》(王淑霞 編譯)
※【全文編譯】歐亞集團2016全球風險 (1)
※獨家編譯 | 五千年歷史耶路撒冷 到底是誰的「首都」?
※法意編譯 | 希拉里:韋伯教會我如何做一個政治家
※法意編譯 | 特朗普現象:民主過盛還是民主不足?