天天看點

編譯環境搭建:Makefile

前言

    長久以來,筆者一直想用一種管理工具,将所編寫的測試程式、算法代碼以及工程代碼統一管理起來。因為有些是用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大家都清楚吧。

編譯環境搭建:Makefile

作者

   出處:http://www.cnblogs.com/gina

   本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀