2011-02-10 32 views
0

是我的第一個問題,也是第一次管理GNU Make,所以我想解釋一下我的問題。也許你可以幫我在這個隧道的末端找到一個燈。ifeq問題我試圖瞭解

那件事我試着做的是檢查一個詞在我的路徑和檢測路徑後做一些

我有上作出這樣的代碼:

WORD=GNUMAKE; \ 
    FOUND=1; \ 
    echo "$$FOUND"; \ 
    PWD=$(PWD); \ 
    ifeq ($(findstring $$WORD,$$PWD),) \ 
     $(warning list contains "$$WORD") \ 
    endif 

但是當我運行$使我得到這個錯誤,對我來說這麼奇怪,找不到解決方案 你能幫我嗎?

/bin/sh: syntax error at line 1: `ifeq' unexpected 
make: *** [all] Error 2 

謝謝

+0

`ifeq`無效猛砸/ sh的語法。 `如果[-z $(findstring ...)];雖然,fi'可能會奏效。 – 2011-02-10 18:00:39

+0

不錯的答案。無論如何這是一件糟糕的事情。歡呼 – 2013-06-20 19:42:15

回答

4

了GNU make對待線加入了與\爲單行。 ifeq et。人。需要在他們自己的路線上,而不是像C中的#ifdef(如果這對你有幫助的話)。

你似乎對製作的東西感到困惑。

製作執行三個不同的階段生成文件:

  1. 它讀取在Makefile,構建圖形內存,節省宏/擴展宏是必要的。
  2. 它看着你問它做什麼,並決定如何走圖。
  3. 它走的圖,擴大殼的食譜之前將製造的字符串傳遞到殼。

你可以得到讓聽從你的命令在讀取makefile文件

WORD = GNUMAKE 
FOUND = 1 
$(warning ${FOUND}) 
ifneq ($(findstring ${WORD},${CURDIR}),) 
    $(warning list contains "${WORD}") 
endif 

或者你可以得到作出這樣做只是因爲它使命令傳遞給shell(即,外殼執行):

.PHONY: target 
target: 
    $(if $(findstring ${WORD},${CURDIR}),$(warning list contains "${WORD}"))echo Shell command here 

或者確實得到了外殼做到這一點。

+0

對三個階段的描述真的很好。做得好。 – 2011-02-10 22:42:25

+1

有一個錯誤。第一個片段應該有「ifneq(」,而不是「ifeq(」 – pmod 2011-02-11 08:01:24

1

您正在使用shell命令搞亂make命令。 ifeq顯然屬於make但以某種方式進入shell。

這將發現GNUMAKE單詞在當前路徑,即它將是父目錄之一。把它放到Makefile中並調用make。

INPUT := $(shell pwd | tr -s "/" " ") 
WORD=GNUMAKE 
ifneq ($(filter $(WORD),$(INPUT)),) 
    $(warning list contains $(WORD)) 
endif 
0
WORD = GNUMAKE 
FOUND = 0 
$(warning $$FOUND) 
ifneq ($(findstring $$WORD,$(PWD)),) 
    $(warning list contains $$WORD) 
endif 

這正是我一直在設置 希望它有助於