91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Makefile編寫的方式

發布時間:2021-06-25 13:46:20 來源:億速云 閱讀:116 作者:chen 欄目:大數據

本篇內容主要講解“Makefile編寫的方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Makefile編寫的方式”吧!

Makefile編寫

1. make和Makefile的介紹

1.1 make工具

利用make工具可以自動完成編譯工作。這些工作包括:

如果僅僅修改了某幾個源文件,則只重新編譯這幾個源文件;如果某個頭文件被修改,則重新編譯所有包含該頭文件的源文件。利用這種自動編譯可大大簡化開發工作,避免不必要的重新編譯。

1.2 Makefile

make工具通過一個稱為Makefile的文件來完成并自動維護編譯工作。Makefile文件描述了整個工程的編譯、鏈接等規則。

2. Makefile基本規則

TARGET ...:DEPENDENCIES ...

    COMMAND

    ...

目標(TARGET)程序產生的文件,如可執行文件和目標文件;目標也可以是要執行的動作,如clean,也稱偽目標。

依賴(DEPENDENCIES)是用來產生目標的輸入文件列表,一個目標通常依賴于多個文件。

命令(COMMAND)是make執行的動作(命令是shell命令或者是可在shell下執行的程序)。注意:每個命令行的起始字符必須為TAB字符。

如果DEPENDENCIES中有一個或多個文件更新的話,COMMAND就要執行,這就是Makefile最核心的內容。

接下來就根據這個Makefile基本規則來編寫一個最基本的Makefile文件

.PHONY:clean

main:main.o sub.o add.o print.o

    gcc -Wall -g main.o add.o sub.o print.o -o main

main.o:main.c

    gcc -Wall -g -c main.c -o main.o

add.o:add.c add.h

    gcc -Wall -g -c add.c -o add.o

sub.o:sub.c sub.h

    gcc -Wall -g -c sub.c -o sub.o

print.o:print.c print.h

    gcc -Wall -g -c print.c -o print.o

clean:

    rm -f *.o main

我們可以看到,main是我們最終想要生成的目標文件,它依賴main.o sub.o add.o print.o這四個.o文件。因此要執行gcc -Wall -g main.o add.o sub.o print.o -o main命令來生成目標文件,但是當前沒有這些.o文件,因此就要先生成這些.o文件。我們寫了四條**.o:**.c然后執行gcc -Wall -g -c **.c -o **.o,這些語句就會生成目標文件的依賴項。

clean是一個偽目標文件,因為它沒有依賴項。我們只是想通過make clean來將.o文件刪除,但是我們通常要指定.PHONY:clean這條語句,用來顯式的指定clean是偽目標,來防止當前目錄下有一個同名的clean文件。這樣,一個簡單呢的Makefile文件就寫好了。

3. Makefile自動化變量

雖然像上述那樣可以完成編譯,但是明顯非常麻煩,接下來介紹Makefile的自動化變量。

選項名 作用

$@ 規則的目標文件名

$< 規則的第一個依賴文件名

$^ 規則的所有依賴文件列表

我們使用這些自動化變量來嘗試從寫剛才的Makefile

.PHONY:clean

OBJ=main.o sub.o add.o print.o

main:$(OBJ)

    gcc -Wall -g $^ -o $@

main.o:main.c

    gcc -Wall -g -c $< -o $@

add.o:add.c add.h

    gcc -Wall -g -c $< -o $@

sub.o:sub.c sub.h

    gcc -Wall -g -c $< -o $@

print.o:print.c print.h

    gcc -Wall -g -c $< -o $@

clean:

    rm -f *.o main

我們定義了一個變量叫OBJ,他是我們的依賴項列表。然后使用自動化變量來代替對應的文件,如上所示。

但是,我們這些.c文件都要生成.o文件,這樣寫也非常麻煩,我們介紹另一些規則。

模式規則 

%.o:%.c

后綴規則 

.c:.o

我們來使用這兩種規則:

.PHONY:clean

CC = gcc

CFLAGS = -Wall -g

OBJ = main.o sub.o add.o print.o

main:$(OBJ)

    $(CC) $(CFLAGS) $^ -o $@

#%.o:%.c

.c.o:

    $(CC) $(CFLAGS) -c $< -o $@

clean:

    rm -f *.o main

使用這兩個規則,就會將所有.c文件生成同名的.o文件,這樣,Makefile就更加簡潔。

4. make常用的內嵌函數

函數調用 

$(function arguments)

$(wildcard PATTERN)

當前目錄寫的匹配模式的文件

例如:src=$(wildcard *.c)

$(patsubst PATTERN,REPLACEMENT,TEXT)

模式替換函數

例如:$(patsubst %.c, %.o, \$src)

等價于$(src:.c=.o)

shell函數

執行shell命令

例如:$(shell ls -d */)

到此,相信大家對“Makefile編寫的方式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和龙市| 铜川市| 尉氏县| 灌云县| 师宗县| 奉节县| 敦煌市| 镇坪县| 青海省| 万山特区| 祥云县| 商城县| 连云港市| 康保县| 荣昌县| 郎溪县| 靖州| 隆昌县| 景宁| 凤台县| 贺州市| 巴里| 乐业县| 酉阳| 广饶县| 衡东县| 曲靖市| 西吉县| 阿合奇县| 和静县| 台湾省| 仲巴县| 成安县| 左云县| 温宿县| 浦县| 龙游县| 兰西县| 延安市| 松溪县| 固阳县|