Makefile基礎講解

2021-08-01 21:33:14 字數 1513 閱讀 9996

1、makefile基本語法

在makefile中我們經常看到 = := ?= +=這幾個賦值運算子,那麼他們有什麼區別呢?我們來做個簡單的實驗

新建乙個makefile,內容為:

ifdef define_vre

vre = 「hello world!」

else

endif

ifeq ($(opt),define)

vre ?= 「hello world! first!」

endif

ifeq ($(opt),add)

vre += 「kelly!」

endif

ifeq ($(opt),recover)

vre := 「hello world! again!」

endif

all:

@echo $(vre)

敲入以下make命令:

make define_vre=true opt=define 輸出:hello world!

make define_vre=true opt=add 輸出:hello world! kelly!

make define_vre=true opt=recover  輸出:hello world! again!

make define_vre= opt=define 輸出:hello world! first!

make define_vre= opt=add 輸出:kelly!

make define_vre= opt=recover 輸出:hello world! again!

從上面的結果中我們可以清楚的看到他們的區別了

= 是最基本的賦值

:= 是覆蓋之前的值

?= 是如果沒有被賦值過就賦予等號後面的值

+= 是新增等號後面的值

之前一直糾結makefile中「=」和「:=」的區別到底有什麼區別,因為給變數賦值時,兩個符號都在使用。網上搜了一下,有人給出了解答,但是本人愚鈍,看不懂什麼意思。幾尋無果之下,也就放下了。今天看一篇部落格,無意中發現作者對於這個問題做了很好的解答。解決問題之餘不免感嘆,有時候給個例子不就清楚了嗎?為什麼非要說得那麼學術呢。^_^

1、「=」

make會將整個makefile展開後,再決定變數的值。也就是說,變數的值將會是整個makefile中最後被指定的值。看例子:

x = foo

y = $(x) bar

x = xyz

在上例中,y的值將會是 xyz bar ,而不是 foo bar 。

2、「:=」

「:=」表示變數的值決定於它在makefile中的位置,而不是整個makefile展開後的最終值。

x := foo

y := $(x) bar

x := xyz

$^:代表所有的依賴檔案

v $@:代表目標

v $<:代表第乙個依賴檔案

一般我們可以使用「

$(wildcard *.c)

」來獲取工作目錄下的所有的

.c檔案列表

Makefile的例項講解

makefile,顧名思義,它的作用是來生成檔案的。makefile可以對源 進行管理,可以完成編譯,鏈結,執行等階段。當編寫完成後,在終端執行make命令就可以執行makefile檔案中的行為,一鍵完成編譯,鏈結,執行等操作。非常的方便。makefile有自己的檔案規則,它可以定義和使用變數,他也...

例項講解Linux下的makefile

1 程式 結構如下 makefile makefile haha.c hehe.c 1.1 需要被編譯的源 如下 cat haha.c include stdio.h int main cat hehe.c include stdio.h int main 1.2 makefile的指令碼如下 ca...

Makefile基礎 變數

這一節我們詳細看看makefile中關於變數的語法規則。先看乙個簡單的例子 foo bar bar huh?all echo foo 我們執行make將會打出huh?當make讀到foo bar 時,確定foo的值是 bar 但並不立即展開 bar 然後讀到bar huh?確定bar的值是huh?然...