目錄
一、make和Makefile的作用
二、make和Makefile的使用
清理
首頁 運維 linux運維 Linux自動化建置工具make和Makefile怎麼使用

Linux自動化建置工具make和Makefile怎麼使用

May 14, 2023 pm 04:22 PM
linux make makefile

一、make和Makefile的作用

在一個工程中的原始檔案不計數,其按類型、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至要進行更複雜的功能操作。

所以,makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make指令,整個工程完全自動編譯,極大的提高了軟體開發的效率。

make是一個指令工具,是一個解釋makefile中指令的指令工具,一般來說,大多數的IDE都有這個指令,例如:Delphi的make,Visual C 的nmake,Linux下GNU的make。可見,makefile都成為了一 種在工程上的編譯方法。 make是一條指令,makefile是一個文件,兩個搭配使用,就可以完成專案自動化建置。

二、make和Makefile的使用

在了解依賴關係和依賴方法之前,我們來寫一個C語言的小程式。

Linux自動化建置工具make和Makefile怎麼使用

我們建立了一個make.c的文件,並寫上了一句hello make的程式碼。

那我們再建立一個Makefile檔(makefile也可以,但不建議)。

然後我們編輯Makefile檔案並寫如下程式碼:

Linux自動化建置工具make和Makefile怎麼使用

然後我們儲存退出。

然後我們可以執行make指令。如果提示make不存在,則是因為沒有安裝,可以切換至root身分安裝。安裝程式碼:yum install makesudo install make

正常執行make後會出現如下顯示。

Linux自動化建置工具make和Makefile怎麼使用

然後我們ll來查看目前目錄下的檔案。

我們可以發現多了一個可執行程式make。那我們運行用 ./make 運行試試。

Linux自動化建置工具make和Makefile怎麼使用

我們會發現這個可執行程式輸出make。

這就是我們的自動化建置工具,只需要在Makefile裡面設定一下。往後直接輸入make即可編譯程式碼。那我們再輸入一次make試試。

Linux自動化建置工具make和Makefile怎麼使用

提示我們 make程式是最新的。也就是說,如果你沒有修改或更新程式的話。那就不會為你編譯,因為你程式都沒動呀,編譯它幹嘛。

那麼此時我們回過來分析 Makefile裡面寫的程式碼。

Linux自動化建置工具make和Makefile怎麼使用

首先我們把它分成三個部分

make

make.c

gcc make.c -o make -std=c99

#這三者的關係就是,make 是依賴make .c 產生的。它們兩者有依賴關係 ,而gcc make.c -o make -std=c99則是make 依賴make.c的方法,叫做依賴方法

什麼是依賴關係和依賴方法?

打個比方。

月底了,你的生活費用光了。這時候你打電話給你爸爸,跟他說:「爸,月底了。我沒錢了。」。此時你的爸爸就知道了,會給你打生活費。這裡面,你和你的父親是父子關係,所以你依賴你的父親,你們之間有依賴關係。而你的父親給你生活費,這是你依賴父親的一種方式,所以這就是依賴方法。如果此時你打電話給你室友的父親要生活費,他會直接讓你滾。因為你們根本不構成依賴關係,不構成依賴關係就沒有依賴方法。

Linux自動化建置工具make和Makefile怎麼使用

所以我的程式也是一樣的。 make 是產生的可執行程式。而它依賴make.c,因為它是從 make.c編譯來的。而依賴方法則是 執行 gcc make.c -o make -std=c99 這條指令。

依賴關係的原理

  • make會在目前目錄下找名字叫「Makefile」或「makefile」的檔案。

  • 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到「hello」這個文件, 並把這個文件作為最終的目標文件。

  • 如果hello檔案不存在,或是hello所依賴的後面的test.o檔案的檔案修改時間要比test這個檔案新(可以用touch 測試),那麼,他就會執行後面定義的指令來產生test這個檔。

  • 如果test所依賴的test.o檔案不存在,那麼make會在目前檔案中找目標為test.o檔案的依賴性,如果找到則再根據那一個規則產生test.o檔。 (這有點像是堆疊的過程)

  • 當然,你的C文件和H文件是存在的啦,於是make會產生test.o 文件,然後再用test.o檔案宣告make的終極任務,也就是執行檔test了。

  • 這就是整個make的依賴性,make會一層又一層地去找檔案的依賴關係,直到最後編譯出第一個目標文 件。

  • 在尋找的過程中,如果出現錯誤,例如最後被依賴的檔案找不到,那麼make就會直接退出,並報錯, 而對於所定義的命令的錯誤,或是編譯不成功,make根本不理。

  • make只管檔案的依賴性,即,如果在我找了依賴關係之後,冒號後面的檔案還是不在,那麼對不起, 我就不工作啦。

清理

我們平常在寫程式碼的時候,常常會需要重複編譯,執行程式碼。

而在下次重新編譯之前,需要先清理一下上次產生的可執行程式。但是清理的時候可能清理錯誤,不小心把原始檔刪了,這又造成了問題。

那我們有沒有方法解決呢?答案是當然有。

我們繼續編輯Makefile檔。

Linux自動化建置工具make和Makefile怎麼使用

我們在原有的基礎上加上了

.PHONY:clean

clean:

	rm -f make
登入後複製

那麼.PHONY有什麼作用呢?

.PHONY修飾的是一個偽目標的,偽目標總是被執行的。 clean是自己定義的一條make指令,使用方法為make clean

那我們來試試這條指令

Linux自動化建置工具make和Makefile怎麼使用

我們可以看到它被清理了,那為什麼說偽目標它總是被執行的呢?我們多次執行它看看。

Linux自動化建置工具make和Makefile怎麼使用

我們可以一直執行它,那我們多次執行make呢?

Linux自動化建置工具make和Makefile怎麼使用

我們會發現,make執行了一次,就無法執行了,因為沒有被.PHONY修飾。那我用.PHONY修飾它再試試。

Linux自動化建置工具make和Makefile怎麼使用

然後我們儲存退出,多次執行make

Linux自動化建置工具make和Makefile怎麼使用

#我們可以看到它被多次執行了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

我們儲存退出,多次執行make

Linux自動化建置工具make和Makefile怎麼使用

我們就可以看到它被執行多次了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

#

以上是Linux自動化建置工具make和Makefile怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

vscode 無法安裝擴展 vscode 無法安裝擴展 Apr 15, 2025 pm 07:18 PM

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

vscode 可以用於 mac 嗎 vscode 可以用於 mac 嗎 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

See all articles