国产午夜精品无码一区二区,国产精品一区二区 尿失禁,国产成人亚洲精品青草,国产精品人妻无码久久久久,国产精品久久久久久久影院

當(dāng)前位置: 首頁 > 英語 > 語法形態(tài)

makefile語法,linux中make的用法

  • 語法形態(tài)
  • 2024-01-26

makefile語法?比較參數(shù)“arg1”和“arg2”的值是否相同。當(dāng)然,參數(shù)中我們還可以使用make的函數(shù)。如:ifeq ($(strip $(foo)),);endif 這個(gè)示例中使用了“strip”函數(shù),如果這個(gè)函數(shù)的返回值是空(Empty),那么,makefile語法?一起來了解一下吧。

makefile編譯

Makefile語法基礎(chǔ)

在Linux下,自動(dòng)化編譯是通過make命令來完成的(一些廠商也提供了它們自己的make命令,如gmake等),make命令的基本格式如下:

make

[-f

makefile]

[label]

它可以通過-f參數(shù)指定輸入文件,當(dāng)省略-f參數(shù)時(shí),默認(rèn)輸入文件名為Makefile,由于我們通常不用這個(gè)-f參數(shù),往往就用默認(rèn)的Makefile文件名。

Makefile是一個(gè)文本文件,它是基于一定的語法規(guī)則的,它的基本執(zhí)行規(guī)則定義如下:

target

:

[prerequisites]

command

target

標(biāo)簽,用于標(biāo)志當(dāng)前構(gòu)建的規(guī)則,它也可以是文件。

prerequisites

依賴項(xiàng),在構(gòu)建該標(biāo)簽的時(shí)候先執(zhí)行的規(guī)則

command

make需要執(zhí)行的命令。(任意的Shell命令)

注意:Makefile的target是頂格寫的,而Command需要加一個(gè)Tab鍵。我這里為了排版看起來舒服點(diǎn),每一行都多加了一個(gè)Tab鍵,如果要使用本文的Makefile示例,請(qǐng)去掉各行的第一個(gè)Tab鍵,否則make的時(shí)候報(bào)錯(cuò)。

例如,我們編寫一個(gè)簡(jiǎn)單的Makefile:

clean:

@echo

"clean"

all:

@echo

"all"

當(dāng)我們直接執(zhí)行make命令的時(shí)候,輸出如下:

tianfang

>

make

clean

tianfang

>

make

all

all

tianfang

>

make

clean

clean

從中我們可以看到:默認(rèn)情況下構(gòu)建第一個(gè)標(biāo)簽。

cmake語法

makefile中ifeq,ifneq,ifdef和ifndef的區(qū)別與用法

使用條件判斷,可以讓make根據(jù)運(yùn)行時(shí)的不同情況選擇不同的執(zhí)行分支。條件表達(dá)式可以是比較變量的值,或是比較變量和常量的值。

一、示例

下面的例子,判斷$(CC)變量是否“gcc”,如果是的話,則使用GNU函數(shù)編譯目標(biāo)。

libs_for_gcc = -lgnu

normal_libs =

foo: $(objects)

ifeq ($(CC),gcc)

$(CC) -o foo $(objects) $(libs_for_gcc)

else

$(CC) -o foo $(objects) $(normal_libs)

endif

可見,在上面示例的這個(gè)規(guī)則中,目標(biāo)“foo”可以根據(jù)變量“$(CC)”值來選取不同的函數(shù)庫來編譯程序。

我們可以從上面的示例中看到三個(gè)關(guān)鍵字:ifeq、else和endif。ifeq的意思表示條件語句的開始,并指定一個(gè)條件表達(dá)式,表達(dá)式包含兩個(gè)參數(shù),以逗號(hào)分隔,表達(dá)式以圓括號(hào)括起。else表示條件表達(dá)式為假的情況。endif表示一個(gè)條件語句的結(jié)束,任何一個(gè)條件表達(dá)式都應(yīng)該以endif結(jié)束。

makefile如何運(yùn)行

@在Makefile一般用來解析shell命令,

@if [ ! -d $(CPU) ]; then mkdir $(CPU); fi

后面跟的是shell的判斷語句。

你可以用@把shell命令放在Makefile中執(zhí)行。

makefile調(diào)用makefile

$@是Makfile里的一種自動(dòng)化變量,代表目前規(guī)則中所有的目標(biāo)的集合,在模式規(guī)則中,如果有多個(gè)目標(biāo),那么,"$@"就是匹配于目標(biāo)中模式定義的集合。

Makefile規(guī)則語法

targets : prerequisites

command

...

$@就是對(duì)應(yīng)targets目標(biāo)集合。

舉個(gè)例子具體說明:

objects = t1.o t2.o

$(objects): %.o: %.c

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

這里objects包含兩個(gè)目標(biāo),t1.o和t2.o,$@就代表objects,也即{t1.o t2.o}這個(gè)目標(biāo)集合。

執(zhí)行makefile文件的命令

makefile 語法里沒有直接類似if...elseif...else.....的這種結(jié)構(gòu),但是有類似 if ...else ...語句的結(jié)構(gòu): ifeq...else...endif。所以可用嵌套的方式 實(shí)現(xiàn)if...elseif...else.....的這種結(jié)構(gòu)

ifeq (, )表示 if(等于 )

例如:

ifeq ($(CC),gcc)

libs=$(libs_for_gcc)

else

ifeq ($(CC),gplus)

libs=$(libs_for_gplus)

else

libs=$(normal_libs)

endif

endif

以上就是makefile語法的全部?jī)?nèi)容,(RM) *.o *.d $(EXES)這個(gè) Makefile 文件實(shí)現(xiàn)了在編譯程序“ foo”使用優(yōu)化選項(xiàng)“ -O2”但不使用調(diào)試選項(xiàng) “ -g”,而在編譯“ bar”時(shí)采用了“ -g”但沒有“ -O2”。這就是目標(biāo)指定變量的靈活之 處。

猜你喜歡