編譯環境搭建:Makefile

前言

********************************************************************************************************************
本系列文章所提供的算法均在以下環境下編譯通過。
 【算法編譯環境】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
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章