Linux新手必學:make命令解析教程

一、make命令簡介

make命令是一種自動化編譯程序,他可以根據程序中的makefile文件來進行編譯、鏈接等操作。make命令可以很好地解決代碼規模較大、程序依賴較多時的編譯問題。在Linux環境下,make命令已經成為一種必備的編譯工具。

在使用make命令之前,需要先了解一下常用的編譯器。Linux系統上常用的編譯器有gcc、g++、ld等。gcc是一種C語言編譯器,g++是一種C++語言編譯器,ld則是用來進行鏈接操作的工具。

make命令利用makefile文件中的規則來進行編譯操作。makefile文件是一個腳本文件,用來指定編譯操作的依賴關係以及具體的編譯操作。一個makefile文件通常包含以下三個部分。

target:dependencies
	command

這裡的target指定了編譯目標,dependencies指定了這個目標所依賴的文件,command則是在這些文件滿足條件時所執行的編譯命令。這幾部分構成了makefile文件的規則。

二、make命令的使用方法

1、基本使用方法

下面是一個簡單的makefile文件例子,用來編譯一個名為hello的程序。

hello:hello.c
	gcc -o hello hello.c

在上面的例子中,我們指定了一個目標為hello的程序,依賴於hello.c文件,並且編譯命令是gcc -o hello hello.c。執行make命令時,make命令將會根據hello程序的規則來編譯程序。

使用make命令編譯hello程序,只需要在終端中進入hello的工作目錄,輸入make命令即可:

cd /path/to/hello/directory
make

在完成編譯後,會在當前目錄下生成一個名為hello的可執行程序。

2、多目標編譯

當一個makefile文件需要對多個程序進行編譯時,我們可以使用多個目標來實現。

all:hello world

hello:hello.c
	gcc -o hello hello.c

world: world.c
	gcc -o world world.c

在這個例子中,我們指定了兩個目標:all、hello、world。其中all是默認目標,在執行make命令時,指定的目標如果為空,則默認使用all作為目標。

執行make命令時,會按照每個目標的編譯規則進行編譯操作。例如,編譯hello程序時,make命令會根據hello的規則來編譯hello程序。同樣的,編譯world程序時,make命令也會根據world的規則來編譯。

3、清除生成文件

當程序的編譯目標發生變化時,我們需要重新編譯程序。在重新編譯之前,我們需要先清理掉上一次編譯生成的文件。make命令提供了一個clean規則,用來清除生成的文件。

clean:
	rm -f hello world

在這個例子中,我們指定了一個名為clean的規則,用來清除生成的hello、world文件。使用make命令清除生成的文件,只需要在終端中進入程序所在的目錄,然後執行make clean命令即可:

cd /path/to/program/directory
make clean

三、makefile編寫技巧

1、變數的使用

在makefile文件中,我們可以使用變數來表示程序需要的庫文件、編譯器等等。使用變數可以很大程度上提高編譯規則的可讀性和可維護性。

CC = gcc
CFLAGS = -g -Wall
LIBS = -lm

hello:hello.c
	$(CC) $(CFLAGS) -o hello hello.c $(LIBS)

在這個例子中,我們定義了三個變數:CC、CFLAGS、LIBS。其中CC代表編譯器,CFLAGS代表編譯選項,LIBS代表需要鏈接的庫文件。

在編譯hello程序時,我們使用了這些變數來指定編譯規則,這使得代碼更加清晰、易於維護。

2、依賴關係的設置

在編譯一個程序時,往往需要依賴於多個源文件和庫文件。在makefile文件中,我們需要設置好這些依賴關係,這樣make命令就可以自動判斷是否需要重新編譯程序。

OBJ = hello.o world.o

hello:$(OBJ)
	$(CC) $(CFLAGS) -o hello $(OBJ) $(LIBS)

hello.o:hello.c
	$(CC) -c hello.c $(CFLAGS)

world.o:world.c
	$(CC) -c world.c $(CFLAGS)

在這個例子中,我們定義了一個名為OBJ的變數,它包含了所有的目標文件。在編譯hello程序時,我們依賴於$(OBJ)中的所有目標文件。如果其中有一個目標文件發生了變化,則make命令就會重新編譯hello程序。

同時,我們針對每個源文件設置了單獨的編譯規則。這樣,當我們只修改一個源文件時,make命令只需要重新編譯這個文件,而不是重新編譯整個程序。

3、自動化變數的使用

在makefile文件中,除了常規變數外,還有一種特殊的變數,稱作自動化變數。這些變數的值是在make命令執行過程中自動生成的,用來表示目標、依賴文件、命令等。

常用的自動化變數有:

  • $@:表示目標文件
  • $<:表示第一個依賴文件
  • $^:表示所有的依賴文件
  • $?:表示比目標文件新的所有依賴文件
  • $*:表示目標文件的basename
all:hello world

hello:hello.o
	$(CC) $(CFLAGS) -o $@ $< $(LIBS)

world:world.o
	$(CC) $(CFLAGS) -o $@ $< $(LIBS)

%.o:%.c
	$(CC) $(CFLAGS) -c $< -o $@

在這個例子中,我們使用了自動化變數來表示目標文件、依賴文件等信息。在編譯每個目標時,make命令會自動生成相應的變數值。這種方式可以很好地簡化makefile文件的編寫,同時,也可以提高編譯規則的可維護性。

四、總結

本文介紹了Linux下常用的make命令,包括make命令的使用方法和makefile文件的編寫技巧。make命令是一種自動化編譯程序,可以很好地解決程序依賴關係的複雜問題。在編寫makefile文件時,我們需要注意設置好目標、依賴關係,同時使用變數和自動化變數來提高編譯規則的可讀性和可維護性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286830.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:48
下一篇 2024-12-23 03:49

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python命令大全及說明

    Python是一種高級編程語言,由Guido van Rossum於1989年底發明。它具有良好的語法結構和面向對象的編程思想,具有簡潔、易讀、易學的特點,是初學者以及專業開發人員…

    編程 2025-04-29
  • Git config命令用法介紹:用正確的郵箱保障開發工作

    本文將詳細介紹如何使用git config命令配置Git的全局和本地用戶信息,特別是如何正確使用用戶郵箱,保障Git操作的正常進行。 一、git config命令介紹 Git中的每…

    編程 2025-04-29

發表回復

登錄後才能評論