目錄
Make簡介
Make 如何運作的
1. 一個簡單的範例
2. 透過-B 選項讓所有目標總是重新建立
3. 使用 -d 選項列印偵錯資訊
4. 使用 -C 選項改變目錄
5. 透過-f 選項將其它檔案視為Makefile
首頁 運維 linux運維 linux系統的編譯指令怎麼用

linux系統的編譯指令怎麼用

May 23, 2023 pm 05:20 PM
linux

linux系統的編譯指令是「Make」。在linux系統中,make是一個非常重要的編譯命令,管理員用它透過命令列來編譯和安裝很多開源的工具,程式設計師用它來管理他們大型複雜的專案編譯問題。 Make被用來自動化編譯大型程式的任務,它可以自動偵測程式中需要重新編譯的部分,並下發對應的編譯指令。

Make簡介

make 是 linux 系統的實用程式。它被用來管理大型程式的自動編譯任務,自動判斷程式的哪個部分需要重新編譯,並且傳送編譯指令。雖然,我們最常見於 C 語言程式的編譯。但是,make 不限於某一特定語言,凡是可以透過 shell 指令來執行編譯器的語言都可以使用 make 。除此之外,你甚至可以用 make 描述任何建置任務,這些任務中,檔案需要在其依賴的檔案發生變動後自動更新。

Make 如何運作的

Make 指令對於不熟悉背後機理的人來說,就像命令列參數一樣接受目標。通常,這些操作會儲存在名為「Makefile」的特殊檔案中,並且與目標相對應。更多信息,閱讀關於 Makefiles 如何工作的系列文章。

Make指令在第一次執行時,會掃描Makefile以尋找目標和對應的依賴關係。如果這些依賴項也需要被編譯成目標,就要繼續掃描 Makefile 並建立它們的依賴關係,接著進行編譯。一旦主要依賴項完成編譯,就會編譯主目標(這是透過make指令輸入的)。

現在,假設你對某個原始檔進行了修改,你再次執行make 命令,它將只編譯與該原始檔相關的目標文件,因此,編譯最終的可執行檔節省了大量的時間。

>Make 指令實例

以下是本文所使用的測試環境:

OS —— Ubunut 13.04
Shell —— Bash 4.2.45
Application —— GNU Make 3.81
登入後複製

以下是工程的內容:

$ ls 
anotherTest.c Makefile test.c test.h
登入後複製

下面是Makefile 的內容:

all: test test: test.o anotherTest.o 
    gcc -Wall test.o anotherTest.o -o testtest.o: test.c 
    gcc -c -Wall test.c 

anotherTest.o: anotherTest.c 
    gcc -c -Wall anotherTest.c 

clean: 
    rm -rf *.o test
登入後複製

現在我們來看Linux 下一些make 指令應用的實例:

1. 一個簡單的範例

#為了編譯整個工程,你可以簡單的使用make 或是在make 指令後面帶上目標all

$ make 
gcc -c -Wall test.c 
gcc -c -Wall anotherTest.c 
gcc -Wall test.o anotherTest.o -o test
登入後複製

你能看到 make 指令第一次建立的依賴以及實際的目標。

如果你再查看目錄內容,裡面多了一些.o 檔案和執行檔:

$ ls 
anotherTest.c anotherTest.o Makefile test test.c test.h test.o
登入後複製

現在,假設你對test.c 檔案做了一些修改,重新使用make 編譯工程:

$ make 
gcc -c -Wall test.c 
gcc -Wall test.o anotherTest.o -o test
登入後複製

你可以看到只有test.o 重新編譯了,然而另一個Test.o 沒有重新編譯。

現在清理所有的目標檔案和可執行檔test,你可以使用目標clean:

$ make clean
rm -rf *.o test$ ls
anotherTest.c Makefile test.c test.h
登入後複製

你可以看到所有的.o 檔案和執行檔test都刪除了。

2. 透過-B 選項讓所有目標總是重新建立

#到目前為止,你可能注意到make 指令不會編譯那些自從上次編譯之後就沒有更改的文件,但是,如果你想覆蓋make 這種預設的行為,你可以使用-B 選項。

下面是個例子:

$ make
make: Nothing to be done for `all’.$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test
登入後複製

你可以看到儘管make 命令不會編譯任何文件,然而make -B 會強制編譯所有的目標文件以及最終的執行文件。

3. 使用 -d 選項列印偵錯資訊

如果你想知道 make 執行時實際做了什麼,請使用 -d 選項。

這是一個例子:

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles…
Reading makefile `Makefile’…
Updating makefiles….
Considering target file `Makefile’.
Looking for an implicit rule for `Makefile’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.o’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.c’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.cc’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.C’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.cpp’.
Trying pattern rule with stem `Makefile’.
--More--
登入後複製

這是很長的輸出,你也看到我使用了 more 指令來一頁一頁顯示輸出。

4. 使用 -C 選項改變目錄

你可以為 make 指令提供不同的目錄路徑,在尋找 Makefile 之前會切換目錄的。

這是一個目錄,假設你就在目前目錄下:

$ ls 
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt
登入後複製

但是你想執行的make 指令的Makefile 檔案保存在../make-dir/ 目錄下,你可以這樣做:

$ make -C ../make-dir/ 
make: Entering directory `/home/himanshu/practice/make-dir’ 
make: Nothing to be done for `all’. 
make: Leaving directory `/home/himanshu/practice/make-dir
登入後複製

你能看到make 指令先切到特定的目錄下,在那執行,然後再切換回來。

5. 透過-f 選項將其它檔案視為Makefile

如果你想將重新命名為Makefile 文件,例如取名為my_makefile 或其它的名字,我們想讓make 將它也當成Makefile,可以使用-f 選項。

make -f my_makefile
登入後複製

透過這個方法,make 指令會選擇掃描 my_makefile 來取代 Makefile。

以上是linux系統的編譯指令怎麼用的詳細內容。更多資訊請關注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)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

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

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終端命令不能用 vscode終端命令不能用 Apr 15, 2025 pm 10:03 PM

VS Code 終端命令無法使用的原因及解決辦法:未安裝必要的工具(Windows:WSL;macOS:Xcode 命令行工具)路徑配置錯誤(添加可執行文件到 PATH 環境變量中)權限問題(以管理員身份運行 VS Code)防火牆或代理限制(檢查設置,解除限制)終端設置不正確(啟用使用外部終端)VS Code 安裝損壞(重新安裝或更新)終端配置不兼容(嘗試不同的終端類型或命令)特定環境變量缺失(設置必要的環境變量)

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

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

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

See all articles