乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      GNU make中文手冊-第九章:執(zhí)行make

       todaytomo 2006-12-30
      GNU make中文手冊-第九章:執(zhí)行make 作者: hew  發(fā)布日期: 2006-3-21    查看數(shù): 163   出自: http://www.
      第九章:執(zhí)行make

      --------------------------------------------------------------------------------

      一般描述整個工程編譯規(guī)則的Makefile可以通過不止一種方式來執(zhí)行。最簡單直接的方法就是使用不帶任何參數(shù)的“make”命令來重新編譯所有過時的文件。通常我們的Makefile就書寫為這種方式。

      在某些情況下:

      1. 可能需要使用make更新一部分過時文件而不是全部

      2. 需要使用另外的編譯器或者重新定義編譯選項

      3. 只需要察看那些文件被修改,而不需要重新編譯

      為了達到這些特殊的目的,需要使用make的命令行參數(shù)來實現(xiàn)。Make的命令行參數(shù)能實現(xiàn)的功能不僅限于這些,通過make的命令行參數(shù)可以實現(xiàn)更多特殊功能。

      另外,make的退出狀態(tài)有三種:

      0 — 狀態(tài)為0時,表示執(zhí)行成功。

      2 — 執(zhí)行過程出現(xiàn)錯誤,同時會提示錯誤信息。

      1 — 在執(zhí)行make時使用了“-q”參數(shù),而且在當前存在過時的目標文件。



      本章的內(nèi)容主要講述如何使用make的命令參數(shù)選項來實現(xiàn)一些特殊的目的。在本章最后會對make的命令行參數(shù)選項進行比較詳細的討論。

      9.1 指定makefile文件
      本文以前的部分對如何指定makefile文件已經(jīng)有過介紹(參考 Makefile文件的命名 一節(jié))。當需要將一個普通命名的文件作為makefile文件時,需要使用make的“-f”、“--file”或者“--makefile”選項。例 如:“make –f altmake”,它的意思是告訴make將文件“altmake”作為makefile文件來解析執(zhí)行。

      當在make的命令行選項中出現(xiàn)多個“-f”參數(shù)時,所有通過“-f”參數(shù)指定的文件都被作為make解析執(zhí)行的makefile文件。

      默認情況,在沒有使用“-f”(“--file”或者“--makefile”)指定文件時。make會在工作目錄(當前目錄)依次搜索命名為 “GNUmakefile”、“makefile”和“Makefile”的文件,最終解析執(zhí)行的是這三個文件中首先搜索到的哪一個。

      9.2 指定終極目標
      關(guān)于“終極目標”的基本概念我們在前面已經(jīng)提到過(參考 make如何工作 一節(jié))。所謂終極目標就是make最終所要重建的、Makefile中某個規(guī)則的目標(也可以稱之為“最終規(guī)則”)。為了完成對終極目標的重建,可能會觸 發(fā)它的依賴或者依賴的依賴文件被重建的過程。

      默認情況下,終極目標就是出現(xiàn)在Makefile中,除以點號“.”(參考 Makefile的特殊目標 一節(jié))開始的第一個規(guī)則中的第一個目標(如果第一個規(guī)則存在多個目標)。因此我們的Makefile就書寫為:第一個目標的編譯規(guī)則就描述了整個工程或者 程序的編譯過程和規(guī)則。如果在Makefile中的第一個規(guī)則有多個目標,那么默認的終極目標是多個目標中的第一個。我們在Makefile所在的目錄下 執(zhí)行“make”時,將完成對默認終極目標的重建。

      另外,也可以通過命令行將一個Makefile中的目標指定為此次make過程的終極目標,而不是默認的終極目標。使用Makefile中目標名作為參數(shù) 來執(zhí)行“make”(格式為 “make TARGET_NAME”,如:“make clean”),可以把這個目標指定為終極目標。使用這種方式,我們也可以同時指定多個多個終極目標。

      任何出現(xiàn)在Makefile規(guī)則中的目標都可以被指定為終極目標(不包含以“-”開始的和包含“=”的賦值語句,一般它們也不會作為一個目標出現(xiàn)),而且 也可以指定一個Makefile中不存在的目標作為終極目標,前提是存在一個對應的隱含規(guī)則能夠?qū)崿F(xiàn)對這個目標的make。例如:目錄“src”下存在一 個.c的源文件“foo.c”,在Makefile中不存在目標“foo”或者次目錄下就沒有makefile文件,為了編譯“foo.c”生成可執(zhí)行的 “foo”。只需要將“foo”作為make的參數(shù)執(zhí)行:“make foo”就可以實現(xiàn)編譯“foo”的目的。

      make執(zhí)行時設(shè)置一個特殊變量“MAKECMDGOALS”,此變量記錄了命令行參數(shù)指定的終極目標列表,沒有通過參數(shù)指定終極目標時此變量為空。注意:此變量僅限于用在特殊的場合(比如判斷),在Makeifle中最好不要對它進行重新定義!

      例如:



      sources = foo.c bar.c



      ifneq ($(MAKECMDGOALS),clean)

      include $(sources:.c=.d)

      endif



      例子中我們使用了變量“MAKECMDGOALS”來判斷命令行參數(shù)是否指定了終極目標為“clean”,如果不是才包含所有源文件對應的依賴關(guān)系描述文件。上例避免在“make clean”時make試圖重建所有.d文件的過程。

      這種方式主要用在以下幾個方面:

      1. 對程序的一部分進行編譯,或者僅僅對某幾個程序進行編譯而不是完整編譯這個工程(也可以在命令行參數(shù)中明確給出原本的默認的終極目標,例如:make all,沒有人會說它是錯誤的。但是大家都會認為多此一舉)。例如以下一個Makefile的片段,其中各個文件都有自己的描述規(guī)則:



      .PHONY: all

      all: size nm ld ar as



      僅需要重建“size”文件時,執(zhí)行“make size”就可以了。其它的程序就不會被重建。

      2. 指定編譯或者創(chuàng)建那些正常編譯過程不能生成的文件(例如重建一個調(diào)試輸出文件、或者編譯一個調(diào)試版本的程序等),這些文件在Makefile中存在重建規(guī)則,但是它們沒有出現(xiàn)在默認終極目標目標的依賴中。

      3. 指定執(zhí)行一個由偽目標定義的若干條命令或者一個空目標文件。如絕大多數(shù)Makefile中都會包含一個“clean”偽目標,這個偽目標定義了刪除 make過程生成的所有文件的命令,需要刪除這些文件時執(zhí)行“make clean”就可以了。本節(jié)以下列出了一些典型的偽目標和空目標的名字。

      部分標準的偽目標和空目標命名:

      ² all

      作為Makefile的頂層目標,一般此目標作為默認的終極目標。

      ² clean

      這個偽目標定義了一組命令,這些命令的功能是刪除所有由make創(chuàng)建的文件。

      ² mostlyclean

      和“clean”偽目標功能相似。區(qū)別在于它所定義的刪除命令不會全部刪除由make生成的文件。比如說不需要刪除某些庫文件。

      ² distclean

      ² realclean

      ² clobber

      同樣類似于偽目標,只是它們所定義的刪除命令所刪除的文件更多??梢园莔ake創(chuàng)建的文件。例如:編譯之前系統(tǒng)的配置文件、鏈接文件等。

      ² install

      將make成功創(chuàng)建的可執(zhí)行文件拷貝到shell 環(huán)境變量“PATH”指定的某個目錄。典型的,應用可執(zhí)行文件被拷貝到目錄“/usr/local/bin”,庫文件拷貝到目錄“/usr/local/lib”目錄下。

      ² print

      打印出所有被更改的源文件列表。

      ² tar

      創(chuàng)建一個tar文件。

      ² shar

      創(chuàng)建一個源代碼的shell文檔(shar文件)。

      ² dist

      為源文件創(chuàng)建發(fā)布的壓縮包,可以使各種壓縮方式的發(fā)布包。

      ² TAGS

      更新一個工程的“tags”列表。

      ² check

      ² test

      對Makefile最后生成的文件進行檢查。

      這些功能和目標的對照關(guān)系并不是GNU make規(guī)定的。你可以在Makefile中定義任何命名的偽目標。但是以上這些都被作為一個默認的規(guī)則,所有開源的工程中這些特殊的目標的命名都是按照 這種約定來的。既然絕大多數(shù)程序員都遵循這種約定,自然我們也應該按照這種約定來做。否則在別人看來這樣Makefile只能算一個樣例,不能作為正式版 本。

      9.3 替代命令的執(zhí)行
      書寫Makefile的目的就是為了告訴make一個目標是否過期,以及如果重建一個過期的目標。但是在某些時候,我們并不希望真正更新那些已經(jīng)過期的目 標文件(比如:只是檢查更新目標的命令是否正確,或者察看那些目標需要更新)。要實現(xiàn)這樣的目的,可以使用一些特定的參數(shù)來指定make所要執(zhí)行的動作。 通過指定的參數(shù),就替代了make默認動作的執(zhí)行。因此我們把這種方式稱為:替代命令的執(zhí)行。這些參數(shù)包括:

      -n

      --just-print

      --dry-run

      --recon

      指定make執(zhí)行空操作(不執(zhí)行規(guī)則的命令),只打印出需要重建目標使用的命令(只打印過期的目標的重建命令),而不對目標進行重建。

      -t

      --touch

      類似于shell下的“touch”命令的功能。更新所有目標文件的時間戳(對于過時的目標文件不進行內(nèi)容更新,只更新時間戳)。

      -q

      --question

      不執(zhí)行任何命令并且不打印任何輸出信息,只檢查所指定的目標是否已經(jīng)是最新更。如果是則返回0,否則返回1。使用“-q”(“--question”)的 目的只是讓make返回指定(沒有指定則時終極目標)的目標當前是否是最新的。我們可以根據(jù)它的返回值來判斷是否須要真正的執(zhí)行更新目標的動作(返回值時 1的情況)。

      -W FILE

      --what-if= FILE

      --assume-new= FILE

      --new-file= FILE

      這個參數(shù)需要指定一個文件名。通常是一個存在源文件。make將當前系統(tǒng)時間作為這個文件的時間戳(假設(shè)這個文件被修改過,但不真正的更改文件本身的時間 戳)。因此這個文件的時間戳被認為最新的,在執(zhí)行時依賴于這個文件的目標將會被重建。通過這種方式并結(jié)合“-n”參數(shù),我們可以查看那些目標依賴于指定的 文件。

      通常“-W”參數(shù)和“-n”參數(shù)一同使用,可以在修改一個文件后來檢查修改會造成那些目標需要被更新,但并不執(zhí)行更新的命令,只是打印命令。

      “-W”和“-t”參數(shù)配合使用時,make將忽略其它規(guī)則的命令。只對依賴于“-W”指定文件的目標執(zhí)行“touch”命令,在沒有使用“-s”時,可 以看到那些文件執(zhí)行了“touch”。需要說明的是,make在對文件執(zhí)行“touch”時不是調(diào)用shell的命令,而是由make直接操作。

      “-W”和“-q”參數(shù)配合使用時。由于將當前時間作為指定文件的時間戳(目標文件相對于系統(tǒng)當前時間是過時的),所以make的返回狀態(tài)在沒有錯誤發(fā)生時為1,存在錯誤時為2。

      注意:以上三個參數(shù)同時使用時可能會出現(xiàn)錯誤。



      總結(jié):

      參數(shù)“-n”、“-t”和“-q”不影響之前帶“+”號和包含“$(MAKE)”的命令行的執(zhí)行。就是說如果在規(guī)則的命令行中命令之前使用了“+”或者此命令行是遞歸地make調(diào)用時,無論是否使用了這三個參數(shù)之一,這些命令都得到執(zhí)行。

      “-W”參數(shù)有兩個特點:

      1. 可以和“-n”或者“-q”參數(shù)配合使用來查看修改所帶來的影響(導致那些目標會被重建)。

      2. 在不指定“-n”和“-q”參數(shù)、只使用“-W”指定一個文件時,可以模擬這個文件被修改的狀態(tài)。make就會重建依賴于此文件的所有目標。

      另外“-p”和“-v”參數(shù)可以允許我們輸出Makefille被執(zhí)行的過程信息,相信這一點在很多場合,特別是調(diào)試我們的Makefile是非常有用。



      9.4 防止特定文件重建
      有些時候當修改了工程中的某一個文件后,并不希望重建那些依賴于這個文件的目標。比如說我們在給一個頭文件中加入了一個宏定義、或者一個增加的函數(shù)聲明, 這些修改不會對已經(jīng)編譯完成的程序產(chǎn)生任何影響。但在執(zhí)行make時,因為頭文件的改變會導致所有包含它的源文件被重新編譯,當然了終極目標肯定也會被重 建(除非你的模塊時獨立的,或者說你的Makefile的規(guī)則鏈的定義本身就存在缺陷)。這種情況下,為了避免重新編譯整個工程,我們可以按照下邊的過程 來處理:

      第一種:

      1. 使用“make”命令對所有需要更新的目標進行重建。保證修改某個文件之前所有的目標已經(jīng)是最新的。

      2. 編輯需要修改的那個源文件(修改的頭文件的內(nèi)容不能對之前的編譯的程序有影響,比如:更改了頭文件中的宏定義。這樣會造成已經(jīng)存在的程序和實現(xiàn)不相符!這里所說的修改指:不改變已經(jīng)存在的任何東西,除非你有特殊的要求)。

      3. 使用“make -t”命令來改變已存在的所有的目標文件的時間戳,將其最后修改時間修改到當前時間。

      第一種方式的是現(xiàn)實基于這樣的條件:有需要對未更改頭文件之前的編譯程序進行保存(有點像備份)。通常這種需求還是比較少見的。更多的情況是:修改這個頭 文件之前已經(jīng)修改了很多源文件或者其它的頭文件,并且也沒有執(zhí)行make(缺少了上邊的第一步)。這種方式,有點像有計劃的修改。沒有普遍性,修改通常是 不可預知的。因此這種方式在實際應用中幾乎沒有參考的意義。對于不可預知的修改所帶來的問題,我們需要另外一種方式。

      第二種方式在很大程度上可以滿足我們的需求:

      第二種:

      1. 執(zhí)行編譯,使用“make –o HEADERFILE”,“HEADERFILE”為需要忽略更改的頭文件,防止那些依賴于這個頭文件的目標被重建。忽略多個頭文件的修改可使用多個“- o HEADERFILE”。這樣,除了獨立依賴于頭文件“HEADERFILE”的目標不被重建以外,其它的目標會根據(jù)規(guī)則來決定是否會被重建。需要注意的 是:“-o”參數(shù)的這種使用方式僅限于頭文件(.h文件),不能使用“-o”來指定源文件。

      2. 執(zhí)行“make -t”命令。

      9.5 替換變量定義
      執(zhí)行make時,一個含有“=”的命令行參數(shù)“V=X”的含義是將變量“V”的值設(shè)置為“X”。通過這種方式定義的變量會替代在Makefile中同名變 量定義(如果存在,并且在Makefile中沒有使用指示符“override”對這個變量進行生命),稱之為命令行參數(shù)定義覆蓋普通變量定義。

      通常用這種方式來傳遞一個公共變量給make。例如:在Makefile中,使用變量“CFLAGS”來指定編譯參數(shù),在Makefile中規(guī)則的命令一般都是這么寫的:



      cc -c $(CFLAGS) foo.c



      這樣就可以通過改變“CFLAGS”的值來控制編譯選項。我們可以在Makefile中為它指定值。例如:



      CFLAGS=-g



      當直接執(zhí)行“make”時,編譯命令是“cc –c –g foo.c”。如果需要改變“CFLAGS”的定義,我們可以在命令行中執(zhí)行“make CFLAGS=’-g –O2’”,此時所執(zhí)行的編譯命令將是“cc –c –g –O2 foo.c”(在參數(shù)中如果包含空格或者shell的特殊字符,則需要將參數(shù)放在引號中)。對變量“CFLAGS”定義追加的功能就是使用這種方式來實現(xiàn) 的。

      變量“CFLAGS”可以通過這種方式來實現(xiàn),它是make的隱含變量之一。對于普通變量的定義,也可以通過這種方式來對它進行重新定義(覆蓋Makefile中的定義)、或者實現(xiàn)變量值的追加功能。

      通過命令行參數(shù)定義變量時,也存在兩種風格的變量定義:遞歸展式定義和直接展開式定義。上例中使用遞歸展開式的定義(使用“=”),也可以是直接展開式的(使用“:=”)。除非在命令行中指定變量的值中包含其它變量或者函數(shù)的引用,否則這兩種方式在這種情況下是等價的。

      為了防止命令行參數(shù)的變量定義覆蓋Makefile中的同名變量定義,可以在Makefile中使用指示符“override”聲明這個變量。這一點前邊的章節(jié)不止一次的提到過!

      9.6 使用make進行編譯測試
      正常情況make在執(zhí)行Makefile過程中,如果出現(xiàn)命令執(zhí)行錯誤,會立即放棄執(zhí)行過程并返回一個非0的狀態(tài)。就是說錯誤發(fā)生點之后的命令將不會被執(zhí)行。一個錯誤的發(fā)生就表明了終極目標將不能被重建,make一旦檢查到錯誤就會立刻終止執(zhí)行。

      假如我們在修改了一些源文件之后重新編譯工程,當然了,我們所希望的是在某一個文件編譯出錯以后能夠繼續(xù)進行后續(xù)文件的編譯。直到最后出現(xiàn)鏈接錯誤時才退 出。這樣的目的是為了了解所修改的文件中那些文件沒有修改正確。在下一次編譯之前能夠?qū)Τ霈F(xiàn)錯誤的所有文件進行改正。而不是編譯一次改正一個文件,或者改 正一個文件再編譯一次。

      我了實現(xiàn)我們這個目的,需要使用make的“-k”或者“--keep-going”命令行選項。這個參數(shù)的功能是告訴make當出現(xiàn)錯誤時繼續(xù)執(zhí)行,直 到最后出現(xiàn)致命錯誤(無法重建終極目標)才返回非0并退出。例如:當編譯一個.o目標文件時出現(xiàn)錯誤,如果使用“make -k”執(zhí)行,make將不會在檢測到這個錯誤時退出(雖然已經(jīng)知道終極目標是不可能會重建成功的);只是給出一個錯誤消息,make將繼續(xù)重建其它需要重 建的目標文件;直到最后出現(xiàn)致命錯誤才退出。在沒有使用“-k”或者“—keep-going”時,make在檢測到錯誤時會立刻退出。

      總之:在通常情況下,make的目的是重建終極目標。當它在執(zhí)行過程中一旦發(fā)現(xiàn)無法重建終極目標,就立刻以非0狀態(tài)退出。當使用“-k”或者“-- keep-going”參數(shù)時,執(zhí)行的目的是為了測試重建過程,需要發(fā)現(xiàn)存在的所有問題,以便在下一次make之前進行修正。這也是調(diào)試Makefile 或者查找源文件錯誤的一種非常有效的手段。

      9.7 make的命令行選項
      本節(jié)羅列出了make 所支持的所有命令行參數(shù)(這些參數(shù)可以通過make的man手冊查看):

      -b

      -m

      忽略,提供其它版本make兼容性。

      -B

      --always-make

      強制重建所有的規(guī)則中出現(xiàn)的目標文件。

      -C DIR

      --directory=DIR

      在讀取Makefile之前,進入目錄“DIR”,就是切換工作目錄到“DIR”之后執(zhí)行make。存在多個“-C”選項時,make的最終工作目錄是每 一個目錄將是前一個相對路徑。例如:“make –C / -C etc”等價于“make –C /etc”。被用在遞歸地make調(diào)用中。

      -d

      make執(zhí)行時打印出所有的調(diào)試信息。包括:make認為那些文件需要重建;那些文件需要比較它們的最后修改時間、比較的結(jié)果;重建目標所要執(zhí)行的命令; 使用的隱含規(guī)則等。使用“-d”選項可以看到make構(gòu)造依賴關(guān)系鏈、重建目標過程的所有信息,它等效于“—debug=a”.

      —debug[=OPTIONS]

      make執(zhí)行時輸出調(diào)試信息??梢允褂?#8220;OPTIONS”控制調(diào)試信息級別。默認是“OPTIONS=b”,“OPTIONS”的可能值為下列這些,首字母有效(all 和 aw等效)。

      a(all)

      輸出所有類型的調(diào)試信息,等效于“-d”選項。

      b(basic)

      輸出基本調(diào)試信息。包括:那些目標過期、是否重建成功過期目標文件。

      v(verbose)

      “basic”級別之上的輸出信息。包括:解析的makefile文件名,不需要重建文件等。此選項目默認打開“basic”級別的調(diào)試信息。

      i(implicit)

      輸出所有使用到的隱含規(guī)則描述。此選項目默認打開“basic”級別的調(diào)試信息。

      j(jobs)

      輸出所有執(zhí)行命令的子進程,包括命令執(zhí)行的PID等。

      m(makefile)

      也就是makefile,輸出make讀取makefile,更新makefile,執(zhí)行makefile的信息。

      -e

      --environment-overrides

      使用系統(tǒng)環(huán)境變量的定義覆蓋Makefile中的同名變量定義。



      -f=FILE

      --file= FILE

      --makefile= FILE

      指定“FILE”為make執(zhí)行的makefile文件。

      -h

      --help

      打印幫助信息。

      -i

      --ignore-errors

      執(zhí)行過程中忽略規(guī)則命令執(zhí)行的錯誤。

      -I DIR

      --include-dir=DIR

      指定被包含makefile文件的搜索目錄。在Makefile中出現(xiàn)“include”另外一個文件時,將在“DIR”目錄下搜索。多個“-I”指定目錄時,搜索目錄按照指定順序進行。

      -j [JOBS]

      --jobs[=JOBS]

      指定可同時執(zhí)行的命令數(shù)目。在沒有指定“-j”參數(shù)的情況下,執(zhí)行的命令數(shù)目將是系統(tǒng)允許的最大可能數(shù)目。存在多個“-j”參數(shù)時,盡最后一個“-j”指定的數(shù)目(“JOBS”)有效。

      -k

      --keep-going

      執(zhí)行命令錯誤時不終止make的執(zhí)行,make盡最大可能的執(zhí)行所有的命令,直到出現(xiàn)致命錯誤才終止。參考 測試Makeifle 一節(jié)。

      -l LOAD

      --load-average[=LOAD]

      —max-load[=LOAD]

      告訴make當存在其它任務(wù)在執(zhí)行時,如果系統(tǒng)負荷超過“LOAD”(浮點數(shù)表示的,參考 并發(fā)執(zhí)行命令 一節(jié)),不再啟動新任務(wù)。沒有指定“LOAD”的“-I”選項將取消之前“-I”指定的限制。

      -n

      --just-print

      --dry-run

      --recon

      只打印出所要執(zhí)行的命令,但不執(zhí)行命令。

      -o FILE

      --old-file= FILE

      --assume-old= FILE

      指定文件“FILE”不需要重建,即使相對于它的依賴已經(jīng)過期。因此依賴于文件“FILE”的目標也不會被重建。注意:此參數(shù)不會通過變量“MAKEFLAGS”傳遞給子make進程。關(guān)于“-o”參數(shù)的用法可參考 防止特定文件的重建 一節(jié)

      -p

      --print-data-base

      命令執(zhí)行之前,打印出make讀取的Makefile的所有數(shù)據(jù)(包括規(guī)則和變量的值),同時打印出make的版本信息。如果執(zhí)行打印這些數(shù)據(jù)信息(不打 印其他信息、也不執(zhí)行命令)可以使用“make -qp”命令。查看make執(zhí)行前的預設(shè)規(guī)則和變量,可使用命令“make –p –f /dev/null”。這個選項為我們在復雜環(huán)境中調(diào)試Makefile提供了手段。

      -q

      --question

      稱為“詢問模式”;不運行任何命令,并且無輸出。make只是返回一個查詢狀態(tài)。返回狀態(tài)為0表示沒有目標需要重建,1表示存在需要重建的目標,2表示有錯誤發(fā)生。

      -r

      --no-builtin-rules

      取消所有make內(nèi)嵌的隱含規(guī)則,可以在Makefile中使用模式規(guī)則來定義一個規(guī)則。同時選項“-r”會取消所有支持后追規(guī)則的隱含后綴列表,同樣我 們也可以在Makefile中使用“.SUFFIXES”定義我們自己的后綴規(guī)則。“-r”選項不會取消make內(nèi)嵌的隱含變量。

      -R

      --no-builtin-variabes

      取消make內(nèi)嵌的隱含變量,當然我們可以在Makefile中明確定義某些變量。注意,“-R”選項同時打開“-r”選項。因為沒有了隱含變量,隱含規(guī)則將失去意義(隱含規(guī)則是以內(nèi)嵌的隱含變量為基礎(chǔ)的)。

      -s

      --silent

      --quiet

      取消命令執(zhí)行過程的打印。

      -S

      --no-keep-going

      --stop

      取消“-k”選項。在遞歸的make過程中子make通過“MAKEFLAGS”變量繼承了上層的命令行選項。我們可以在子make中使用“-S”選項取消上層傳遞的“-k”選項,或者取消系統(tǒng)環(huán)境變量“MAKEFLAGS”中的“-k”選項。

      -t

      —touch

      和Linux的touch命令實現(xiàn)功能相同,更新所有目標文件的時間戳到當前系統(tǒng)時間。防止make對所有過時目標文件的重建。

      -v

      --version

      查看make版本信息。

      -w

      --print-directory

      在make進入一個目錄讀取Makefile之前打印工作目錄。這個選項可以幫助我們調(diào)試Makefile,跟蹤定位錯誤。使用“-C”選項時默認打開這個選項。參考本節(jié)前半部分“-C”選項的描述。





      --no-print-directory

      取消“-w”選項??梢允怯迷谶f歸的make調(diào)用過程中,取消“-C”參數(shù)的默認打開“-w”功能。

      -W FILE

      --what-if= FILE

      --new-file= FILE

      --assume-file= FILE

      設(shè)定文件“FILE”的時間戳為當前時間,但不改變文件實際的最后修改時間。此選項主要是為實現(xiàn)了對所有依賴于文件“FILE”的目標的強制重建。

      --warn-undefined-variables

      在發(fā)現(xiàn)Makefile中存在對沒有定義的變量進行引用時給出告警信息。此功能可以幫助我們調(diào)試一個存在多級套嵌變量引用的復雜Makefile。但是:我們建議在書寫Makefile時盡量避免超過三級以上的變量套嵌引用。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多