2016-10-24 60 views
2

該補充文件的語句說的複雜的條件的語法如下:多,如果在生成文件條件語句

conditional-directive-one 
text-if-one-is-true 
else conditional-directive-two 
text-if-two-is-true 
else 
text-if-one-and-two-are-false 
endif 

但我不知道如何使用這個語法來重寫下面的代碼段:

ifeq ($(option), 1) 
CC=gcc 
@echo use gcc 
else ifeq($(option), 2) 
CC=clang 
@echo use clang 
else 
CC=mipsel-linux-gcc 
@echo use mipsel-linux-gcc 
endif 

#first target 
foo: ; 
+1

我不明白你爲什麼要「重寫」該代碼。它有問題嗎?如果是這樣的問題是什麼?我將指出兩件事:首先,在if else($(option),2)''中的ifeq後面需要一個空格。其次,該語法已添加到版本3.81中的GNU make中,因此如果您的版本較舊,則無法使用。 – MadScientist

+0

我忽略了'ifeq'和我的'text-if-one-is-true','text-two-is-true','text-if-one-and-two-are-false'塊之後的空格在第一個目標之前包含食譜(他們沒有在這裏顯示)。這兩件事使我的Makefile不起作用。 –

+0

我很抱歉,但我仍然不明白。你需要在ifeq後面加一個空格,而不是省略一個空格。在提問時,請展示_actual_問題的最小示例,而不是可能不會顯示問題的其他示例。另請剪切並粘貼您看到的確切錯誤消息。在你的評論中,你提到了「在第一個目標之前包含食譜」,這是一種完全不同的錯誤,只有在上面顯示的示例makefile中才會發生。 – MadScientist

回答

0

恕我直言,ifeq聲明佔用太多空間,難以輸入和閱讀。一個更好的選擇:

CC.1 := gcc 
CC.2 := clang 
CC := $(or ${CC.${option}},mipsel-linux-gcc) 
$(info "Using ${CC}") 
1

使用你的Makefile:

ifeq ($(option), 1) 
    CC=gcc 
    @echo use gcc 
else ifeq($(option), 2) 
    CC=clang 
    @echo use clang 
else 
    CC=mipsel-linux-gcc 
    @echo use mipsel-linux-gcc 
endif 

#first target 
foo: 
    echo CC $(CC) 

我得到以下錯誤:

$ make 
Makefile:4: Extraneous text after `else' directive 
Makefile:6: *** commands commence before first target. Stop. 

編輯生成文件按照從@MadScientist建議(即在ifeq後有一個空格):

ifeq ($(option), 1) 
    CC=gcc 
    @echo use gcc 
else ifeq ($(option), 2) 
    CC=clang 
    @echo use clang 
else 
    CC=mipsel-linux-gcc 
    @echo use mipsel-linux-gcc 
endif 

#first target 
foo: 
    echo CC $(CC) 

我得到:

$ make 
Makefile:9: *** commands commence before first target. Stop. 

這話說除非它是一個規則的一部分,你不能使用的命令。如果要記錄這樣的事情,嘗試這樣的:

ifeq ($(option), 1) 
    CC=gcc 
else ifeq ($(option), 2) 
    CC=clang 
else 
    CC=mipsel-linux-gcc 
endif 

$(info CC is $(CC)) 

#first target 
foo: 
    @echo foo 

由此看來,我得到:

$ make 
CC is mipsel-linux-gcc 
foo 

更多信息,請參見https://www.gnu.org/software/make/manual/html_node/Make-Control-Functions.html#index-error$(info ...) - 你可以把它的條件語句,如果內你想要,但你爲什麼? : - >

+0

謝謝,但馬克西姆的答案是如此簡單和優雅。 –