2016-03-04 58 views
0

我想運行一個foreach函數,只有當條件滿足時才能運行。Makefile foreach裏面如果

當我刪除周圍if時,foreach函數可以正常工作。當我像下面這樣編寫我的makefile時,在執行第一個命令之前foreach循環停止工作,並且構建過程永遠不會結束(我不認爲我構建了一個無限循環,因爲沒有執行任何內部命令)。


if [ $(BUILD_SPEC) = mySpec ]; \ 
    then (\ 
     if [ ! -d $(PRJ_ROOT_DIR)/TARGET ]; then mkdir $(PRJ_ROOT_DIR)/TARGET; fi; \ 
     $(foreach target,$(basename $(PROJECT_TARGETS)), \ 
     if [ -e $(PRJ_ROOT_DIR)/$(BUILD_SPEC)/$(target).crc ]; \ 
      then (\ 
       echo Deleting $(PRJ_ROOT_DIR)/$(BUILD_SPEC)/$(target).crc; \ 
       rm -f $(PRJ_ROOT_DIR)/$(BUILD_SPEC)/$(target).crc; \ 
      ) \ 
      fi; \ 
    ) \ 
    ) \ 
fi; 
+0

你的shell是什麼? bash?因爲可能來自殼而不是從製造。也許添加標籤。 – kebs

+0

玩具使用示例可以幫助您理解您的需求,有點不清楚。 – kebs

+0

我在使用eclipse的windows下進行通訊 – yurishi

回答

0

我解決了這個由我自己: 出於某種原因,該命令 「如果[$(BUILD_SPEC)= mySpec]。」不起作用。我將其替換爲「ifeq($(BUILD_SPEC),mySpec)」。現在腳本以我想要的方式工作。

+0

是的,'ifeq'是make命令,所以它由make運行,而不是由主機shell運行。 – kebs

+0

這是真的,但在我的情況下,bash命令必須工作 - >我發現我的eclipse發行版提供了一個完整的z shell。但沒關係..這個解決方案適用於我。 – yurishi