python環(huán)境搭建Makefile簡單使用步驟
Makefile 簡單使用方法
Makefile 是自動化構(gòu)建工具,核心作用是定義項目的構(gòu)建規(guī)則、依賴關(guān)系和執(zhí)行命令,通過 make 命令自動執(zhí)行,替代手動重復(fù)敲編譯/運行/清理等指令,大幅提升開發(fā)效率,尤其適合C/C++項目,也可用于Python/Go等各類項目的自動化流程管理。
一、Makefile 核心規(guī)則(最基礎(chǔ)、最核心)
Makefile 的核心是規(guī)則,一個規(guī)則對應(yīng)一個構(gòu)建目標(biāo),基本格式固定,命令行前必須用 Tab 鍵縮進(空格會報錯,這是最常見的坑):
# 格式:目標(biāo): 依賴文件/依賴目標(biāo) # 執(zhí)行的命令(Tab 開頭,可多行) 目標(biāo)(target): 依賴(dependencies) 命令1(shell 命令均可,如gcc、rm、python等) 命令2
- 目標(biāo):要生成的文件(如可執(zhí)行文件、目標(biāo)文件)或「偽目標(biāo)」(如clean、run,無實際文件生成);
- 依賴:生成目標(biāo)所需的文件/其他目標(biāo)(如編譯可執(zhí)行文件需要的.c源文件);
- 命令:從依賴生成目標(biāo)的shell指令,按順序執(zhí)行。
二、最簡入門示例(編譯單個C文件)
以編譯C文件 main.c 生成可執(zhí)行文件 app 為例,創(chuàng)建名為 Makefile(或 makefile,首字母大小寫均可)的文件,內(nèi)容如下:
# 最簡Makefile:生成可執(zhí)行文件app app: main.c gcc main.c -o app # Tab 開頭,編譯命令 # 清理目標(biāo):刪除生成的可執(zhí)行文件 clean: rm -f app # -f 強制刪除,避免文件不存在時報錯
執(zhí)行命令(終端在Makefile同級目錄)
make # 執(zhí)行第一個目標(biāo)(app),自動編譯 make clean # 執(zhí)行clean目標(biāo),清理生成的文件
三、核心實用特性(簡單易上手)
1. 偽目標(biāo)(.PHONY):避免與同名文件沖突
如果目錄下有個文件叫 clean,直接執(zhí)行 make clean 會失效,用 .PHONY 聲明「偽目標(biāo)」,表示這不是實際要生成的文件,強制執(zhí)行命令:
.PHONY: clean # 聲明clean為偽目標(biāo) app: main.c gcc main.c -o app clean: rm -f app
常用偽目標(biāo):all(構(gòu)建所有目標(biāo))、clean(清理)、run(運行程序)、install(安裝)。
2. 變量:簡化重復(fù)代碼,方便統(tǒng)一修改
定義變量后用 $(變量名) 引用,適合重復(fù)使用的內(nèi)容(如編譯器、編譯參數(shù)、源文件),修改一處即可全局生效:
.PHONY: clean run CC = gcc # 定義編譯器變量 CFLAGS = -Wall # 編譯參數(shù)(-Wall 顯示所有警告) TARGET = app # 可執(zhí)行文件名稱 SRC = main.c # 源文件 # 引用變量,簡化規(guī)則 $(TARGET): $(SRC) $(CC) $(SRC) -o $(TARGET) $(CFLAGS) run: $(TARGET) # 運行目標(biāo),依賴app(先編譯再運行) ./$(TARGET) clean: rm -f $(TARGET)
執(zhí)行 make run,會自動先編譯 app,再運行 ./app。
3. 多目標(biāo)/多依賴:適配多個源文件的場景
如果項目有 main.c 和 func.c 兩個源文件,直接將多個依賴寫在目標(biāo)后即可:
.PHONY: clean CC = gcc TARGET = app # 多依賴:生成app需要main.c和func.c $(TARGET): main.c func.c $(CC) main.c func.c -o $(TARGET) clean: rm -f $(TARGET)
4. 默認目標(biāo):Makefile 第一個目標(biāo)
make 命令不加任何參數(shù)時,會自動執(zhí)行第一個目標(biāo),通常用 all 作為第一個目標(biāo),指定要構(gòu)建的所有核心目標(biāo):
.PHONY: all clean run # all作為第一個目標(biāo),成為默認目標(biāo) all: app # all依賴app,執(zhí)行make即執(zhí)行make all,編譯app CC = gcc TARGET = app SRC = main.c $(TARGET): $(SRC) $(CC) $(SRC) -o $(TARGET) run: $(TARGET) ./$(TARGET) clean: rm -f $(TARGET)
四、稍完整的實用示例(覆蓋核心用法)
整合變量、偽目標(biāo)、多依賴、運行/清理,適合大部分小型項目:
# 聲明偽目標(biāo):all(默認)、clean(清理)、run(運行) .PHONY: all clean run # 定義變量:編譯器、參數(shù)、目標(biāo)文件、所有源文件 CC = gcc CFLAGS = -Wall -g # -g 生成調(diào)試信息,方便gdb調(diào)試 TARGET = myapp # 所有源文件(多個用空格分隔) SRC = main.c func.c tool.c # 默認目標(biāo):構(gòu)建可執(zhí)行文件 all: $(TARGET) # 構(gòu)建規(guī)則:多源文件編譯 $(TARGET): $(SRC) @echo "開始編譯..." # @echo 執(zhí)行時不顯示命令本身,只顯示輸出 $(CC) $(SRC) -o $(TARGET) $(CFLAGS) @echo "編譯完成!生成文件:$(TARGET)" # 運行程序:先編譯再運行 run: $(TARGET) @echo "運行程序:" ./$(TARGET) # 清理生成的文件 clean: @echo "清理文件..." rm -f $(TARGET) @echo "清理完成"
執(zhí)行命令
make # 編譯(默認執(zhí)行all) make run # 編譯+運行 make clean # 清理
五、關(guān)鍵使用要點
- 命令行前必須用 Tab 縮進,不能用空格(編輯器需關(guān)閉「Tab自動轉(zhuǎn)空格」);
- 注釋用
#開頭,單行注釋; - 執(zhí)行命令時,加
@可隱藏命令本身(如@echo只顯示輸出,不顯示echo 開始編譯...); - Makefile 會自動檢查依賴文件的修改時間:如果依賴文件(如.c)比目標(biāo)文件(如可執(zhí)行文件)新,才會重新編譯,否則跳過(節(jié)省構(gòu)建時間)。
六、核心總結(jié)
- Makefile 核心是規(guī)則(目標(biāo):依賴 + Tab命令),用于定義自動化構(gòu)建流程;
- 必學(xué)特性:
Tab縮進、偽目標(biāo)(.PHONY)、變量($(變量))、默認目標(biāo)(第一個); - 常用命令:
make(執(zhí)行默認目標(biāo))、make 目標(biāo)名(執(zhí)行指定目標(biāo),如make clean/run); - 核心價值:替代手動重復(fù)指令,自動檢查文件修改、按需構(gòu)建,適合所有需要重復(fù)執(zhí)行固定流程的項目。
到此這篇關(guān)于python環(huán)境搭建Makefile簡單使用步驟的文章就介紹到這了,更多相關(guān)python makefile使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析python中while循環(huán)和for循環(huán)
在本篇文章里小編給各位整理的是關(guān)于python中while和for循環(huán)知識點詳解,有興趣的朋友們可以學(xué)習(xí)下。2019-11-11
使用Python請求http/https時如何設(shè)置失敗重試次數(shù)
這篇文章主要介紹了使用Python請求http/https時如何設(shè)置失敗重試次數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
Python使用Tkinter打造一個完整的桌面應(yīng)用
在Python生態(tài)中,Tkinter就像一把瑞士軍刀,它沒有花哨的特效,卻能快速搭建出實用的圖形界面,作為Python自帶的標(biāo)準(zhǔn)庫,無需安裝即可使用,這種“開箱即用”的特性讓它成為新手入門GUI開發(fā)的首選,本文將通過構(gòu)建一個完整的記事本應(yīng)用,帶你領(lǐng)略Tkinter的實用魅力2025-06-06
python3 webp轉(zhuǎn)gif格式的實現(xiàn)示例
這篇文章主要介紹了python3 webp轉(zhuǎn)gif格式的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
python網(wǎng)絡(luò)應(yīng)用開發(fā)知識點淺析
在本篇內(nèi)容中小編給學(xué)習(xí)python的朋友們整理了關(guān)于網(wǎng)絡(luò)應(yīng)用開發(fā)的相關(guān)知識點以及實例內(nèi)容,需要的朋友們參考下。2019-05-05

