簡體   English   中英

測試 Makefile 目標中的變量

[英]Test a variable in Makefile target

我試圖讓它工作,但似乎該變量沒有正確傳遞給 if 語句,因為它沒有“進入” if 循環

apply_test:
                $(eval var=$(shell bash -c "echo 1"))        
                echo $(var)
ifeq ($(var),1)
        echo "inside the stmt"
        $(eval var=$(shell bash -c "echo 2")) 
endif
                echo $(var)

通常,我嘗試評估 function 的返回值,以執行后續條件設置,例如在 if-stmt 中設置一個新變量。

我的方法有什么問題?

我的意思是,這里幾乎所有的東西都是有問題的:)。 您沒有解釋為什么要嘗試做如此復雜的事情,但是專業提示:

  • 任何時候你在配方中使用ifeq等 make 條件,它可能不會做你想要的,除非你非常確定你完全理解 makefile 的擴展規則。
  • 任何時候在配方中使用$(shell...)時,這幾乎總是一個壞主意。
  • 每當您在食譜中使用$(eval...)時,這幾乎 100% 絕對是個壞主意。

但是,只處理您眼前的問題: ifeq被處理,而 makefile 正在被解析 直到整個 makefile 被解析並 make 決定運行哪些目標之后,食譜才會運行。 因此,當 make 解析 makefile 並查看ifeq ,變量var尚未設置,因此它評估為空字符串並且永遠不會等於1

預計到達時間

在不了解您的要求的情況下,我會說實現此功能的“正確”方法是在配方中使用 shell 操作。 看起來像這樣:

apply_test:
        var=$$(echo 1) ; \       
        echo $$var; \
        if [ $$var = 1 ]; then \
            echo "inside the stmt"; \
            var=$$(echo 2); \
        fi; \
        echo $$var

暫無
暫無

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

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