位置:首頁 > 其他技術 > Makefile > Makefile 指令

Makefile 指令

有好幾種指令以不同的形式。讓程序可能不支持所有指令。因此,請檢查make是否支持指令,我們這裡解釋。 GNU make支持這些指令

條件指令

條件的指令

  • ifeq 指令開始的條件,指定的條件。它包含兩個參數,用逗號分隔,並用括號括起。兩個參數進行變量替換,然後對它們進行比較。該行的makefile繼IFEQ的服從如果兩個參數的匹配,否則會被忽略。

  • ifneq 指令開始的條件,指定的條件。它包含兩個參數,用逗號分隔,並用括號括起。兩個參數進行變量替換,然後對它們進行比較。makefile ifneq 遵守如果兩個參數不匹配,否則會被忽略。

  • ifdef 指令開始的條件,指定的條件。它包含單參數。如果給定的參數為真,則條件為真。

  • ifndef 指令開始的條件,指定的條件。它包含單參數。如果給定的是假的,那麼條件為真。

  • else 指令會導致以下行如果前麵的條件未能被遵守。在上麵的例子中,這意味著第二個選擇連接命令時使用的第一種選擇是不使用。它是可選的,在有條件有一個else。

  • endif 指令結束條件。每一個條件必須與endif結束。 


條件式指令的語法

一個簡單的條件,冇有其他的語法如下:

conditional-directive
text-if-true
endif

文本如果真可以是任何行文字,被視為makefile文件的一部分,如果條件為真。如果條件是假的,冇有文字來代替。

一個複雜的語法條件如下:

conditional-directive
text-if-true
else
text-if-false
endif

如果條件為真時,文本,如果真正的使用,否則,如果假文本來代替。的文本,如果錯誤的數量可以是任意的文本行。

有條件的指令的語法是相同的,無論是簡單或複雜的條件。有四種不同的測試不同條件下的指令。這裡是一個表:

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2" 

上述條件相反的指令如下

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2" 

條件式指令示例

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


include 指令

include指令告訴make暫停讀取當前makefile文件和讀取一個或多個其它的makefile,然後再繼續。該指令是一行在makefile中,看起來像這樣:
include filenames...

文件名可以包含shell文件名模式。允許額外的空格開頭的行被忽略,但不允許一個標簽。例如,如果有三個`.mk',`.mk' files, `a.mk', `b.mk', and `c.mk', and $(bar) 擴展到bash中,然後下麵的表達式。

include foo *.mk $(bar)

is equivalent to

include foo a.mk b.mk c.mk bish bash

當MAKE處理包括指令,它包含的makefile暫停讀取,並從各列出文件中依次讀取。當這個過程完成,使讀取指令出現在其中的makefile的恢複。


override 指令

如果一個變量已經設置的命令參數,在makefile中被忽略的普通任務。如果要設置makefile的變量,即使它被設置的命令參數,可以使用一個override指令,這是一行看起來像這樣:
override variable = value

or

override variable := value