日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Makefile文件(四)_书写命令

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile文件(四)_书写命令 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

變量說明:

$@ ? ? ? ---> ? ? ?目標(biāo)文件

$^ ? ? ? ---> ? ? ? 所有的依賴文件

$< ? ? ? ---> ? ? ? 第一個(gè)依賴文件

?

一、顯示命令

  @echo 正在編譯xx模塊......

當(dāng)make執(zhí)行時(shí),會(huì)輸出“正在編譯xx模塊......”,但不會(huì)輸出命令

  echo 正在編譯xx模塊......

make執(zhí)行將輸出:echo 正在編譯xx模塊......

       ?正在編譯xx模塊......

說明:“@”字符在命令行前面,這個(gè)命令將不被make顯示出來。如果make執(zhí)行帶參數(shù)“-n”或“--just-print”,那么只是顯示命令不執(zhí)行。這有利于調(diào)試Makefile。而make參數(shù)“-s”或“--slient”則是全面禁止顯示命令

二、命令執(zhí)行

如果要讓上一條命令的結(jié)果應(yīng)用于下一條跳命令時(shí),使用分號(hào)分隔這兩條命令。比如,第一條命令cd,第二條命令得在cd之后基礎(chǔ)上運(yùn)行,那么就不能把這兩條命令寫在兩行上,而應(yīng)該寫在一行上,用分號(hào)分割。

示例:

exec:

  cd /home/hchen

  pwd

示例:

exec:

  cd /home/hchen; pwd

當(dāng)我們執(zhí)行“make exec”時(shí),第一個(gè)例子中的cd沒有作用,pwd會(huì)打印出當(dāng)前的Makefile目錄,第二個(gè)例子中,cd就起作用了,pwd會(huì)打印出“/home/chen”。

三、命令出錯(cuò)

每當(dāng)命令運(yùn)行完成后,make會(huì)檢測(cè)每個(gè)命令的返回碼。如果命令返回成功,那么make會(huì)執(zhí)行下一條命令,當(dāng)規(guī)則中的所有命令成功返回后,這個(gè)規(guī)則就算是成功完成了。如果一個(gè)規(guī)則中的某個(gè)命令出錯(cuò)了(命令退出碼非零),那么make就會(huì)終止執(zhí)行當(dāng)前規(guī)則,這將有可能終止所有規(guī)則的執(zhí)行。

有時(shí),命令的出錯(cuò)并不表示錯(cuò)誤,例如mkdir命令。如果目錄不存在,mkdir成功執(zhí)行,如果目錄存在則出錯(cuò)。但此時(shí)我們不希望mkdir出錯(cuò)而終止規(guī)則的運(yùn)行。

忽略命令的出錯(cuò),可以在Makefile的命令行前加減號(hào)“-”,標(biāo)記為不管命令出不出錯(cuò)都認(rèn)為成功。

全局的辦法:給make加上-i或是--ignore-errors參數(shù),那么Makefile中的所有命令都會(huì)忽略錯(cuò)誤。

如果一個(gè)規(guī)則以“.IGNORE”為目標(biāo),那么這個(gè)規(guī)則中的所有命令都會(huì)忽略錯(cuò)誤。

make的參數(shù)“-k”或是“--keep-going”,表示如果規(guī)則中的某個(gè)命令出錯(cuò)了,那么終止改規(guī)則,但繼續(xù)執(zhí)行其他規(guī)則。

四、嵌套執(zhí)行make

不同目錄下都有自己的Makefile文件。有利于Makefile簡(jiǎn)介,易于維護(hù),對(duì)于模塊編譯和分段編譯有著非常大的好處。

例如,子目錄subdir,該目錄下有個(gè)Makefile文件指明該目錄下文件的編譯規(guī)則。那么總控的Makefile可以這樣寫:

subsystem:

  cd subdir && $(MAKE)

等價(jià)于:

subsystem:

  $(MAKE) -C subdir

定義$(MAKE)宏變量的意思是,也許我們的make需要一些參數(shù),所以定義成一個(gè)變量比較利于維護(hù)。這兩個(gè)例子都是先進(jìn)入“subdir”目錄,然后執(zhí)行make命令。

總控的Makefile的變量可以傳遞到下級(jí)的Makefile中(如果顯式聲明),但是不會(huì)覆蓋下層的Makefile中所定義的變量,除非指定“-e”。

傳遞變量到下級(jí)Makefile,可以聲明:export <variable...>

如果不想傳遞變量到下級(jí)Makefile,可以聲明:unexport<variable...>

示例:

export variable = value

等價(jià)于:

variable = value

export variable

等價(jià)于:

export variable:=value

等價(jià)于:

variable := value

export variable

示例二:

export variable += value

等價(jià)于:

variable += value

export variable

若要傳遞所有變量,一個(gè)export就行了,后面什么不用跟,表示傳遞所有的變量。

注:變量SHELL和MAKEFLAGS變量,這兩個(gè)變量不管是否export,總是要傳遞到下層Makefile中,特別是MAEFLAGS變量,其中包含了make的參數(shù)信息。如果執(zhí)行總控“Makefile”時(shí)有make參數(shù)或是在上層Makefile中定義了這個(gè)變量,那么MAKEFILES變量將會(huì)是這些參數(shù),并會(huì)傳遞到下層Makefile中,這是一個(gè)系統(tǒng)級(jí)的環(huán)境變量。

但是make命令中的幾個(gè)參數(shù)不往下傳遞,“-C”,“-f”,“-h”,“-o”和“-W”,如果他們想往下層傳遞參數(shù),可以:

subsystem:

  cd subdir && $(MAKE) MAKEFLAGS=

如果定義了環(huán)境變量MAKEFLAGS,那么得確信其中的選項(xiàng)是都會(huì)用到的。如果其中有“-t”,“-n”,“-q”,可能會(huì)有意想不到的后果。

參數(shù)“-w”或“--print-directory”會(huì)在make的過程中輸出一些信息,看到目前的工作目錄。比如下級(jí)make目錄是“/home/hchen/gun/make”,如果我們使用“make -w”來執(zhí)行,那么當(dāng)進(jìn)入該目錄時(shí)會(huì)看到:

make: Entering directory '/home/hchen/gnu/make'.

而在完成下層make后離開目錄時(shí),會(huì)看到:

make:Leaving directory '/home/hchen/gnu/make'

當(dāng)使用“-C”參數(shù)指定make下層Makefile時(shí),“-w”會(huì)被自動(dòng)打開。如果參數(shù)中有“-s”(“--slient”)或是“--no-print-directory”,那么,“-w”總是失效的。

五、定義命令包

Makefile中可以為相同的命令序列定義一個(gè)變量,以“define”開始,“endef”結(jié)束,示例:

define run-yacc

  yacc $(firstword $^)

  mv y.tab.c $@

endef

說明:“yun-yacc”是命令包的名字,不要和Makefile中的變量重名。在“define”和“endef”中的兩行就是命令序列。這個(gè)命令包中的第一個(gè)命令是運(yùn)行Yacc程序,因?yàn)閅acc程序總是生成“y.tab.c”的文件,所以第二行的命令就是把這個(gè)文件改名字。

實(shí)例:

foo.c:foo.y

  $(run-yacc)

在這個(gè)命令包的使用中,命令包“run-yacc”中的“$^”就是“foo.y”,“$@”就是“foo.c”,make執(zhí)行命令包時(shí),命令包中的每個(gè)命令會(huì)被依次獨(dú)立執(zhí)行。

轉(zhuǎn)載于:https://www.cnblogs.com/weiyi-mgh/p/6941139.html

總結(jié)

以上是生活随笔為你收集整理的Makefile文件(四)_书写命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。