前言
********************************************************************************************************************本系列文章所提供的算法均在以下環境下編譯通過。
【算法編譯環境】Federa 8,linux 2.6.35.6-45.fc14.i686
【處理器】 Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz
【內存】 2025272 kB
如果有問題或者紕漏或者有好的建議更或者有更好的算法,請不吝賜教。
************************************************************************************************************************
正文
長久以來,筆者一直想用一種管理工具,將所編寫的測試程序、算法代碼以及工程代碼統一管理起來。因爲有些是用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大家都清楚吧。
在我的機器上,大致編譯顯示如下:
作者:Alex
出處:http://blog.csdn.net/hellotime本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。