[英]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.