簡體   English   中英

在GNU Make中使用ifeq和ifndef

[英]Using ifeq and ifndef in GNU Make

我寫了一個相當簡單的測試Makefile ,我定義了兩個目標,all&clean。 我有兩個不同的條件語句。 一個檢查是否存在$(MAKECMDGOALS)特殊變量,另一個檢測命令行目標是否與變量( NODEPS )中列出的目標匹配。 我遇到的問題是我的條件中沒有任何分支被執行。 最終,我想使用條件來決定我提供的目標是否應該包含一些自動生成的依賴文件,但目前我正努力讓任何一個表達式進行評估。 我正在運行GNU make 3.81版,我在Ubuntu和Mac OS X下試過它無濟於事。

    NODEPS := clean
    INCLUDE = $(filter $(NODEPS),$(MAKECMDGOALS))

    .PHONY : all clean

    ifndef $(MAKECMDGOALS)
        @echo "$$(MAKECMDGOALS) is not defined"
    else 
        @echo "$(MAKECMDGOALS) is defined"
    endif

    ifneq (0, $(words $(INCLUDE)))
        @echo "INCLUDE = $(INCLUDE) != 0"
    else
        @echo "INCLUDE = $(INCLUDE) == 0"
    endif


    all :
        @echo "all : $(MAKECMDGOALS)"

    clean : 
        @echo "clean : $(MAKECMDGOALS)"

我最終成功解決了什么問題。 @eriktous是對的,指出我應該使用$(info)而不是@echo 但更巧妙的是,問題的一部分是我用標簽縮進了@echo 似乎選項卡對於規則是強制性的,但在條件中不允許。 另一個錯誤是我在測試條件中擴展了$(MAKECMDGOALS)變量,它應該被編寫為ifndef MAKECMDGOALS

makefile不是shell腳本。 您無法“隨機”將可執行語句放置在您喜歡的任何位置並期望它們被執行。

在makefile中有多種與外界通信的方式: $(info ...)$(warning ...)$(error ...)$(shell @echo ...) (一些或者所有這些可能是GNU make擴展)。

Ps:你拼錯了PHONY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM