Linux下通用的Makefile
生活随笔
收集整理的這篇文章主要介紹了
Linux下通用的Makefile
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux下通用的Makefile
我們在Linux環境下開發程序,少不了要自己編寫Makefile,一個稍微大一些的工程下面都會包含很多.c/.cpp的源文件。如果我們用gcc/g++去一個一個編譯每一個源文件的話,效率會低很多,但是如果我們可以寫一個Makefile,那么只需要執行一個make就OK了,這樣大大提高了開發效率。
但是Makefile的語法規則眾多,而且缺乏參考資料,對于初學者來說,寫起來還是有一定的難度,往往令很多人望而生畏。下面我們介紹幾種比較通用而且簡潔的Makefile,大家只要對它稍作修改就可以用在你們自己的工程里了。
剛剛也說過了,Makefile的規則眾多,可能出現你們在拷貝的過程中,因為系統不同的緣故會導致在拷貝過程中發生不必要的錯誤,導致Makefile不可使用,建議最好去github下去clone
github地址
我一共上傳了4種通用的makefile,自己用的是MyMakefile,各有優缺點,大家請便!!!
這里貼一下MyMakefile:
################################################################ ###################支持C/C++混合編譯############################ ################################################################ PRJ_ROOT= #一般不用更改,這里可以添加頭文件的路徑等,接在LDFLAGS后面,方便使用 CC=g++ #編譯器,編譯C文件選擇gcc,編譯C++文件選著g++(最好選g++,因為其兼容C) CFLAGS= #如果需要調試,在這里增加-g選項,還可以根據自己的需要添加響應的選項命令 CPPFLAGS= #同上 LDFLAGS=-std=c++11 -lpthread################################################################ ###########源文件,每增加一個目標,依樣增加下面一段############# #################################################################源文件列表1 i:=1 SOURCES_CPP_$(i):=test.cpp #在這里添加、修改當前目標需要的CPP源碼 SOURCES_C_$(i):= #在這里添加、修改當前目標需要的C源碼 TARGET_$(i):=testcpp #目標名稱 OBJS_CPP_$(i):=$(patsubst %.cpp,%.o, $(SOURCES_CPP_$(i))) OBJS_C_$(i):= $(patsubst %.c,%.o, $(SOURCES_C_$(i))) OBJS_$(i):= $(OBJS_CPP_$(i)) $(OBJS_C_$(i))#源文件列表2 i:=2 SOURCES_CPP_$(i):= SOURCES_C_$(i):=main.c TARGET_$(i):=mainc OBJS_CPP_$(i):=$(patsubst %.cpp,%.o, $(SOURCES_CPP_$(i))) OBJS_C_$(i):= $(patsubst %.c,%.o, $(SOURCES_C_$(i))) OBJS_$(i):= $(OBJS_CPP_$(i)) $(OBJS_C_$(i))################################################################ #######目標和清除 每增加一個目標,依樣增加一個target############ ################################################################all: $(TARGET_1) $(TARGET_2)@echo "outputfile : $(TARGET_1) $(TARGET_2)" clean:rm -f *.o *.d $(TARGET_1) $(TARGET_2)################################################################ ##########目標, 每增加一個目標,依樣增加下面一段############### #################################################################目標1 $(TARGET_1):$(OBJS_1)$(CC) $(OBJS_1) $(LDFLAGS) -o $(TARGET_1)#目標2 $(TARGET_2):$(OBJS_2)$(CC) $(OBJS_2) $(LDFLAGS) -o $(TARGET_2)################################################################ ###########包含 每增加一個目標,依樣增加下面一行################ ################################################################sinclude $(OBJS_1:.o=.d)sinclude $(OBJS_2:.o=.d)############################################################ #################下面的內容可以不用更改##################### #############################################################下面這邊都是獲取依賴關系 ,屬于約定俗成的寫法,不用更改 %.d: %.c@rm -f $@;@$(CC) -MM $< > $@.1111; \sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.1111 > $@; \rm -f $@.1111%.d: %.cpp@rm -f $@;@$(CC) -MM $< > $@.1111; \sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.1111 > $@; \rm -f $@.1111總結
以上是生活随笔為你收集整理的Linux下通用的Makefile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划之正则表达
- 下一篇: Linux下使用C++操作redis数据