長久以來,筆者一直想用一種管理工具,將所編寫的測試程序、算法代碼以及工程代碼統一管理起來。由於有些是用Java寫的有些是用C++寫的。雖有想法,但卻無行動。這又讓我想起了昨天晚上看到一部電影裏所說,"思想上的巨人,行動上的矮子"。筆者也不想作這種人。要筆耕不輟,要隨時隨地表達思想。後來經過一段時間學習Makefile。發現其強大,無比強大。 算法
就好比說,咱們是用VS2010,或者什麼IDE工具,你要作多少操做啊。起碼你要編寫多個工程,而後右鍵某個工程,點擊編譯,運行吧,有時候工程多了還卡。那反過來用Makefile呢?咱們只須要make就徹底生成咱們所須要的程序文件了。方便吧。鍵盤輸入速度比鼠標點來點去方便吧。你明白打魔獸打dota時鍵盤的重要性了吧。另外在命令行上打make,而後黑屏上一個一個編譯文件,是否是有一種高端大氣上檔次的感受。 不過其實Makefile確實很好,由於他能夠生成多個可執行文件。讓你在一個工程底下弄多個main文件。這一點讓我很開心。這是其優勢一;我不用修改makefile文件,即便是新加一個包含main的文件代碼,我也只須要直接make就OK,可執行文件就直接跑到bin目錄下了。甚至都沒有obj什麼lnk等一大堆亂七八糟的文件。還佔空間,用vs的小夥伴們,不是這樣嗎? 函數
好吧,吐槽了這麼多,真心以爲makefile好用。這裏我弄上來個人Makefile文件。分享給小夥伴們,你們只要放在某個目錄下,不用修改,直接能夠編譯任意多個main函數的。 工具
TARGET_DIR :=bin SRC += $(wildcard *.cpp ) EXE += $(patsubst %.cpp, %, $(SRC) ) COMPILE=g++ CFLAGS= -Wall -g -O0 all : $(EXE) .PHONEY:all % : %.cpp @if [ ! -d bin ]; then mkdir bin; fi $(COMPILE) $(CFLAGS) $< -o $(TARGET_DIR)/$@ clean: rm -rf *.o
稍微解釋下:上面EXE是將src下全部源碼文件去掉.cpp後的文件名,這個文件名就是以後的可執行文件名。好比你的文件夾下有一個test.cpp,這EXE就是test。.PHONEY:all是說明能夠生成多個目標文件。 @if [ ! -d bin ]; then mkdir bin; fi是判斷文件夾下是否存在bin目錄,沒有就建立。底下$(COMPILE) $(CFLAGS) $< -o $(TARGET_DIR)/$@,意思是編譯,編譯完以後直接放在bin目錄下。$<是第一個依賴文件的意思。$@是目標文件的意思。 學習
%:%.cpp是將全部的.cpp文件直接生成目標文件,沒有中間文件的。你們能夠按照本身的需求進行修改。 clean你們都清楚吧。 測試
出處:http://www.cnblogs.com/gina spa
本文版權歸做者全部,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。 命令行