C++中Makefile的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
為青山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及青山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、青山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!介紹
Makefile是一個規(guī)定了怎么去編譯和鏈接程序的腳本文件,在執(zhí)行make命令時會執(zhí)行該文件,window環(huán)境下的IDE,如visual studio已經(jīng)集成了該功能,不需要關(guān)心程序的編譯規(guī)則,在linux下做C/C++開發(fā)時經(jīng)常用到,說到這里首先要知道一個工具make。
make是一個解釋Makefile中指令的命令工具,常見的IDE都集成了這個工具。目前centos 7.3 GNU的make版本是3.82
規(guī)則
目標文件:依賴文件
[Tab]系統(tǒng)指令1 (注意:系統(tǒng)指令前必須有tab)
使用
3.1 簡單使用
現(xiàn)有文件main.cpp test.cpp test.h三個文件,說些Makefile實現(xiàn)增量編譯(當其中有一個文件變化時,重新編譯該文件)
helloworld: main.o test.o g++ main.o test.o -o helloworld main.o: main.cpp test.h g++ -c main.cpp -o main.o test.o: test.cpp test.h g++ -c test.cpp -o test.o clean: rm *.o helloworld
3.2 makefile中使用注釋,變量和函數(shù)
注釋:
行前面加"#"號,如#g++ main.o test.o -o helloworld 表示注釋了該行
變量:
用=定義一個變量,并且賦值(等號兩邊可以加空格)
用+=追加字符串
用$(A)來取得變量的值
例:
A = src echo $(A) @echo $(A) ##只輸出echo的結(jié)果,不顯示執(zhí)行的命令
特殊變量:
$@ 目標文件
$^ 依賴項列表
$< 依賴項列表第一項
函數(shù):
Makefile中有一些預定義函數(shù),形式:
$(函數(shù)名 參數(shù)列表)
參數(shù)列表:以逗號分隔
函數(shù)名和參數(shù)之間用空格分開
#獲取當前目錄路徑
PWD = $(shell pwd)
#獲取當前目錄下所有.cpp文件
CXX_SOURCES = $(wildcard *.cpp)
#獲取當前目錄下所有.cpp文件編譯后的所有目標文件.o
CXX_OBJECTS = $(patsubst *.cpp *.o, $(CXX_SOURCES))
3.3 優(yōu)化3.1中Makefile
EXE = helloworld GCC = g++ $(EXE): main.o test.o $(GCC) $^ -o $(EXE) main.o: main.cpp test.h $(GCC) -c $< -o $@ test.o: test.cpp test.h $(GCC) -c $< -o $@ clean: rm *.o $(EXE)
3.4 優(yōu)化3.3中Makefile
繼續(xù)優(yōu)化Makefile,添加文件夾,把源碼都放入src和lib文件夾,保持增量編譯,即為Makefile通用模板
EXE = helloworld GCC = g++ SUBDIR = src lib CPP_SOURCES = $(foreach dir, $(SUBDIR), $(wildcard $(dir)/*.cpp)) CPP_OBJECTS = $(patsubst %.cpp, %.o, $(CPP_SOURCES)) DEP_FILES = $(patsubst %.o, %.d, $(CPP_OBJECTS)) $(EXE): $(CPP_OBJECTS) $(GCC) $(CPP_OBJECTS) -o $@ %.o: %.cpp $(GCC) -c -MMD $< -o $@ -include $(DEP_FILES) clean: rm $(CPP_OBJECTS) $(EXE)
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)建站的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、建站服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。