快速編寫一個簡潔、正確的makefile
?makefile教程
? ? ? ?當(dāng)我們在 linux 系統(tǒng)下進行 C/C++ 編程,或者要拿著我們 windows 系統(tǒng)下的 VS 編譯器中編寫的 C/C++ 源碼在 linux 系統(tǒng)中運行時,我們就會涉及到 makefile 文件。
? ? ? ?makefile 文件用于 linux 系統(tǒng)中將編寫好的 .c ,.cpp,.h 文件編輯成一個可執(zhí)行文件,類似 VS 中的 “生成解決方案” 的過程。擁有獨立的編寫語言和方法。當(dāng)然,也可以通過shell命令行編譯,但當(dāng)文件較多時,采用命令行去編譯費時費力,并且當(dāng)項目中代碼發(fā)生變化時,不利于后期的更新和維護。
? ? ? ?一個正確可行的makefile文件也具有多種,本次我們介紹一種書寫較為簡潔、上手較為容易的編寫方式,如果要詳細(xì)學(xué)習(xí)的話,makefile文件有很多可以學(xué)習(xí)研究的地方。
1? 準(zhǔn)備
? ? ? ?采用 cd 命令將當(dāng)前工作目錄設(shè)置為代碼文件所在路徑,采用 vim makefile 命令打開文件(如果沒有會自動創(chuàng)建)
2? 編寫
2.1? 定義參數(shù)(主要為了簡潔,便于更新、維護)
CXX = g++ (gcc)? ? ? ?# .cpp 文件用 g++ 編譯,.c 文件用 gcc 編譯
TARGET = .....? ? ? ? ? # 輸入所生成可執(zhí)行文件的名字,類似于 win 中的 ....exe
OBJ = main.o? .....? ? # 輸入包含 main 在內(nèi)的所有 .cpp,但后綴改為 .o,中間空格隔開即可
CXXFLAGS = -c? ? ? # 編譯選項,如果想看警告信息,在后面添加 -Wall,空格隔開
2.2? 編譯
$(TARGRT) : $(OBJ)
制表符$(CXX)? -o? $@? $^? ?# 表示用 g++ 編譯器,將 OBJ 里的所有 .o 生成可執(zhí)行程序
%.o : %.cpp
制表符$(CXX)? $(CXXFLAGS)??$^??-o??$@??? # 表示用?g++?編譯器,將所有 .cpp 文件編譯生成 .o?文件
.PHONY:clean
clean:
制表符rm? -f? ?*.o? $(TARGET)? ? ?#刪除編譯生成的所有 .o 文件和可執(zhí)行程序
2.3? 使用
? ? ? ?makefile 編寫結(jié)束后,在 shell 命令行輸入 make 進行編譯,如果文件名不是makefile,輸入? make? -f? 文件名? 進行編譯,輸入 make clean 刪除生成的文件。
2.4? 運行
? ? ? ?在?shell 命令行輸入?? ./可執(zhí)行程序名? ?就可以成功運行程序了。