有好幾種指令以不同的形式。讓程式可能不支援所有指令。因此,請檢查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 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 variable = value or override variable := value |