使用你的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 ...)
- 你可以把它的條件語句,如果內你想要,但你爲什麼? : - >
我不明白你爲什麼要「重寫」該代碼。它有問題嗎?如果是這樣的問題是什麼?我將指出兩件事:首先,在if else($(option),2)''中的ifeq後面需要一個空格。其次,該語法已添加到版本3.81中的GNU make中,因此如果您的版本較舊,則無法使用。 – MadScientist
我忽略了'ifeq'和我的'text-if-one-is-true','text-two-is-true','text-if-one-and-two-are-false'塊之後的空格在第一個目標之前包含食譜(他們沒有在這裏顯示)。這兩件事使我的Makefile不起作用。 –
我很抱歉,但我仍然不明白。你需要在ifeq後面加一個空格,而不是省略一個空格。在提問時,請展示_actual_問題的最小示例,而不是可能不會顯示問題的其他示例。另請剪切並粘貼您看到的確切錯誤消息。在你的評論中,你提到了「在第一個目標之前包含食譜」,這是一種完全不同的錯誤,只有在上面顯示的示例makefile中才會發生。 – MadScientist