最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python環(huán)境搭建Makefile簡(jiǎn)單使用步驟

 更新時(shí)間:2026年02月07日 10:48:29   作者:serve the people  
Makefile是一種自動(dòng)化構(gòu)建工具,通過定義規(guī)則、依賴關(guān)系和執(zhí)行命令,替代手動(dòng)重復(fù)敲編譯、運(yùn)行和清理等指令,提升開發(fā)效率,本文給大家介紹python環(huán)境搭建Makefile簡(jiǎn)單使用方法,感興趣的朋友跟隨小編一起看看吧

Makefile 簡(jiǎn)單使用方法

Makefile 是自動(dòng)化構(gòu)建工具,核心作用是定義項(xiàng)目的構(gòu)建規(guī)則、依賴關(guān)系和執(zhí)行命令,通過 make 命令自動(dòng)執(zhí)行,替代手動(dòng)重復(fù)敲編譯/運(yùn)行/清理等指令,大幅提升開發(fā)效率,尤其適合C/C++項(xiàng)目,也可用于Python/Go等各類項(xiàng)目的自動(dòng)化流程管理。

一、Makefile 核心規(guī)則(最基礎(chǔ)、最核心)

Makefile 的核心是規(guī)則,一個(gè)規(guī)則對(duì)應(yīng)一個(gè)構(gòu)建目標(biāo),基本格式固定,命令行前必須用 Tab 鍵縮進(jìn)(空格會(huì)報(bào)錯(cuò),這是最常見的坑):

# 格式:目標(biāo): 依賴文件/依賴目標(biāo)
# 	    執(zhí)行的命令(Tab 開頭,可多行)
目標(biāo)(target): 依賴(dependencies)
	命令1(shell 命令均可,如gcc、rm、python等)
	命令2
  • 目標(biāo):要生成的文件(如可執(zhí)行文件、目標(biāo)文件)或「?jìng)文繕?biāo)」(如clean、run,無實(shí)際文件生成);
  • 依賴:生成目標(biāo)所需的文件/其他目標(biāo)(如編譯可執(zhí)行文件需要的.c源文件);
  • 命令:從依賴生成目標(biāo)的shell指令,按順序執(zhí)行。

二、最簡(jiǎn)入門示例(編譯單個(gè)C文件)

以編譯C文件 main.c 生成可執(zhí)行文件 app 為例,創(chuàng)建名為 Makefile(或 makefile,首字母大小寫均可)的文件,內(nèi)容如下:

# 最簡(jiǎn)Makefile:生成可執(zhí)行文件app
app: main.c
	gcc main.c -o app  # Tab 開頭,編譯命令
# 清理目標(biāo):刪除生成的可執(zhí)行文件
clean:
	rm -f app  # -f 強(qiáng)制刪除,避免文件不存在時(shí)報(bào)錯(cuò)

執(zhí)行命令(終端在Makefile同級(jí)目錄)

make        # 執(zhí)行第一個(gè)目標(biāo)(app),自動(dòng)編譯
make clean  # 執(zhí)行clean目標(biāo),清理生成的文件

三、核心實(shí)用特性(簡(jiǎn)單易上手)

1. 偽目標(biāo)(.PHONY):避免與同名文件沖突

如果目錄下有個(gè)文件叫 clean,直接執(zhí)行 make clean 會(huì)失效,用 .PHONY 聲明「?jìng)文繕?biāo)」,表示這不是實(shí)際要生成的文件,強(qiáng)制執(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(運(yùn)行程序)、install(安裝)。

2. 變量:簡(jiǎn)化重復(fù)代碼,方便統(tǒng)一修改

定義變量后用 $(變量名) 引用,適合重復(fù)使用的內(nèi)容(如編譯器、編譯參數(shù)、源文件),修改一處即可全局生效:

.PHONY: clean run
CC = gcc        # 定義編譯器變量
CFLAGS = -Wall  # 編譯參數(shù)(-Wall 顯示所有警告)
TARGET = app    # 可執(zhí)行文件名稱
SRC = main.c    # 源文件
# 引用變量,簡(jiǎn)化規(guī)則
$(TARGET): $(SRC)
	$(CC) $(SRC) -o $(TARGET) $(CFLAGS)
run: $(TARGET)  # 運(yùn)行目標(biāo),依賴app(先編譯再運(yùn)行)
	./$(TARGET)
clean:
	rm -f $(TARGET)

執(zhí)行 make run,會(huì)自動(dòng)先編譯 app,再運(yùn)行 ./app。

3. 多目標(biāo)/多依賴:適配多個(gè)源文件的場(chǎng)景

如果項(xiàng)目有 main.cfunc.c 兩個(gè)源文件,直接將多個(gè)依賴寫在目標(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. 默認(rèn)目標(biāo):Makefile 第一個(gè)目標(biāo)

make 命令不加任何參數(shù)時(shí),會(huì)自動(dòng)執(zhí)行第一個(gè)目標(biāo),通常用 all 作為第一個(gè)目標(biāo),指定要構(gòu)建的所有核心目標(biāo):

.PHONY: all clean run  # all作為第一個(gè)目標(biāo),成為默認(rèn)目標(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)

四、稍完整的實(shí)用示例(覆蓋核心用法)

整合變量、偽目標(biāo)、多依賴、運(yùn)行/清理,適合大部分小型項(xiàng)目:

# 聲明偽目標(biāo):all(默認(rèn))、clean(清理)、run(運(yùn)行)
.PHONY: all clean run
# 定義變量:編譯器、參數(shù)、目標(biāo)文件、所有源文件
CC = gcc
CFLAGS = -Wall -g  # -g 生成調(diào)試信息,方便gdb調(diào)試
TARGET = myapp
# 所有源文件(多個(gè)用空格分隔)
SRC = main.c func.c tool.c
# 默認(rèn)目標(biāo):構(gòu)建可執(zhí)行文件
all: $(TARGET)
# 構(gòu)建規(guī)則:多源文件編譯
$(TARGET): $(SRC)
	@echo "開始編譯..."  # @echo 執(zhí)行時(shí)不顯示命令本身,只顯示輸出
	$(CC) $(SRC) -o $(TARGET) $(CFLAGS)
	@echo "編譯完成!生成文件:$(TARGET)"
# 運(yùn)行程序:先編譯再運(yùn)行
run: $(TARGET)
	@echo "運(yùn)行程序:"
	./$(TARGET)
# 清理生成的文件
clean:
	@echo "清理文件..."
	rm -f $(TARGET)
	@echo "清理完成"

執(zhí)行命令

make        # 編譯(默認(rèn)執(zhí)行all)
make run    # 編譯+運(yùn)行
make clean  # 清理

五、關(guān)鍵使用要點(diǎn)

  1. 命令行前必須用 Tab 縮進(jìn),不能用空格(編輯器需關(guān)閉「Tab自動(dòng)轉(zhuǎn)空格」);
  2. 注釋用 # 開頭,單行注釋;
  3. 執(zhí)行命令時(shí),加 @ 可隱藏命令本身(如 @echo 只顯示輸出,不顯示echo 開始編譯...);
  4. Makefile 會(huì)自動(dòng)檢查依賴文件的修改時(shí)間:如果依賴文件(如.c)比目標(biāo)文件(如可執(zhí)行文件)新,才會(huì)重新編譯,否則跳過(節(jié)省構(gòu)建時(shí)間)。

六、核心總結(jié)

  1. Makefile 核心是規(guī)則(目標(biāo):依賴 + Tab命令),用于定義自動(dòng)化構(gòu)建流程;
  2. 必學(xué)特性:Tab 縮進(jìn)、偽目標(biāo)(.PHONY)、變量($(變量))、默認(rèn)目標(biāo)(第一個(gè));
  3. 常用命令:make(執(zhí)行默認(rèn)目標(biāo))、make 目標(biāo)名(執(zhí)行指定目標(biāo),如make clean/run);
  4. 核心價(jià)值:替代手動(dòng)重復(fù)指令,自動(dòng)檢查文件修改、按需構(gòu)建,適合所有需要重復(fù)執(zhí)行固定流程的項(xiàng)目。

到此這篇關(guān)于python環(huán)境搭建Makefile簡(jiǎn)單使用步驟的文章就介紹到這了,更多相關(guān)python makefile使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python寫了個(gè)疫情信息快速查看工具實(shí)例代碼

    Python寫了個(gè)疫情信息快速查看工具實(shí)例代碼

    本次使用PyQt5開發(fā)了一款疫情信息快速查看工具,實(shí)現(xiàn)了多個(gè)數(shù)據(jù)源的查看,代碼量不大,功能相當(dāng)于瀏覽器,只是限定了一些特定網(wǎng)址,這篇文章主要介紹了Python寫了個(gè)疫情信息快速查看工具,需要的朋友可以參考下
    2022-11-11
  • 使用Python從有道詞典網(wǎng)頁(yè)獲取單詞翻譯

    使用Python從有道詞典網(wǎng)頁(yè)獲取單詞翻譯

    這篇文章主要介紹了使用Python從有道詞典網(wǎng)頁(yè)獲取單詞翻譯的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Python TCP通信客戶端服務(wù)端代碼實(shí)例

    Python TCP通信客戶端服務(wù)端代碼實(shí)例

    這篇文章主要介紹了Python TCP通信客戶端服務(wù)端代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python之打印日志庫(kù)(logging)

    Python之打印日志庫(kù)(logging)

    這篇文章主要介紹了Python之打印日志庫(kù)(logging),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python如何實(shí)現(xiàn)常用的五種排序算法詳解

    python如何實(shí)現(xiàn)常用的五種排序算法詳解

    排序有很多種實(shí)現(xiàn)方法,比如冒泡排序、選擇排序、歸并排序、希爾排序、快速排序、插入排序、堆排序、基數(shù)排序等,這篇文章主要給大家介紹了關(guān)于python如何實(shí)現(xiàn)常用的五種排序算法,需要的朋友可以參考下
    2021-08-08
  • Python實(shí)現(xiàn)SSH隧道功能的示例代碼

    Python實(shí)現(xiàn)SSH隧道功能的示例代碼

    SSH隧道是利用SSH協(xié)議建立一個(gè)加密通道,以保護(hù)通過不安全網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),本文將介紹如何使用Python來實(shí)現(xiàn)SSH隧道功能,感興趣的可以了解下
    2025-02-02
  • 使用Python實(shí)現(xiàn)簡(jiǎn)單的微信控制操作

    使用Python實(shí)現(xiàn)簡(jiǎn)單的微信控制操作

    這篇文章主要為大家詳細(xì)介紹了如何通過Python去調(diào)用Windows API實(shí)現(xiàn)模擬人工操作的方式去實(shí)現(xiàn)控制微信電腦版,感興趣的小伙伴可以參考一下
    2025-01-01
  • Python使用tkinter寫一個(gè)本地密碼管理器

    Python使用tkinter寫一個(gè)本地密碼管理器

    閑來無事,看到自己有很多網(wǎng)站的賬戶密碼,有些網(wǎng)站可能打開一兩次也就忘記了,下一次在輸入賬戶密碼就想不起來,這樣很容易丟失賬號(hào)。所以本文就來用Python和tkinter寫一個(gè)本地密碼管理器吧
    2023-05-05
  • Python自定義sorted排序?qū)崿F(xiàn)方法詳解

    Python自定義sorted排序?qū)崿F(xiàn)方法詳解

    這篇文章主要介紹了Python自定義sorted排序?qū)崿F(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 對(duì)pyqt5中QTabWidget的相關(guān)操作詳解

    對(duì)pyqt5中QTabWidget的相關(guān)操作詳解

    今天小編就為大家分享一篇對(duì)pyqt5中QTabWidget的相關(guān)操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評(píng)論

吴川市| 仙居县| 广西| 临沧市| 金坛市| 溧水县| 连平县| 什邡市| 云南省| 普兰县| 新河县| 柘荣县| 宝山区| 乐清市| 巴楚县| 伊金霍洛旗| 利辛县| 镇赉县| 突泉县| 察雅县| 富阳市| 大埔区| 丰城市| 凤庆县| 四平市| 康保县| 广昌县| 班玛县| 利川市| 敦化市| 陵水| 枞阳县| 大英县| 阿拉尔市| 搜索| 自贡市| 岫岩| 成安县| 南澳县| 如东县| 洛南县|