2011-01-14 45 views
2

我使用的是GNU Make 3.80。在我的Makefile中,我使用自動變量$ @來引用當前目標。

@echo current target is ... [[email protected]] 
ifeq ([email protected],sms) 
    @echo yep, they are equal 
else 
    @echo no, they are not equal 
endif 

看來$ @展開爲短信,如下面的輸出所示。

輸出是:

current target is ... [sms] 
no, they are not equal 

我的問題:自$ @(顯然)擴展到短信,應該不是「真實的」分支IFEQ有條件執行(其結果是輸出應閱讀是的,他們是平等的)? [我很茫然,爲什麼輸出是否定的,他們是不相等的。]

回答

4

GNU Make manual

10.5.3自動變量 ...... 這是非常重要的,你認識 有限的範圍內自動 變量值可用:他們 只有配方內的值。 ... GNU 有一個特殊功能,輔助擴展(請參閱 輔助擴展),這將允許在先決條件列表中使用 自動變量值 。

也就是說,[email protected]只能在包含構建目標的命令的部分內使用,並且在必要條件列表中有一些限制。

但是你可以使用shell命令來實現用於構建目標的命令列表裏面條件:

@echo current target is ... [[email protected]] 
    if [[ "[email protected]" == "sms" ]]; then \ 
     echo yep, they are equal; \ 
    else \ 
     echo no, they are not equal; \ 
    fi 

此外,如果你想檢查哪些指標均在命令行上指定使用MAKECMDGOALS變量。

+0

謝謝你指出,ssmir。 – JaysonFix 2011-01-14 17:54:00