[英]Makefile Linux how to execute function for each variable
我正在嘗試設置具有依賴性的Makefile。 依賴性在變量中指定。
MATH_VER=1.1
EXTERNAL_DEPS=MATH GC LOG
我希望它運行一個函數,該函數嘗試根據可用函數找出每個外部庫的位置。 所以我添加了一個規則setversion,
all:setversion myexe
setversion:
$(foreach CHKLIB, $(EXTERNAL_DEPS), $(call checklib, $(CHKLIB)))
我有做檢查的功能
checklib = ifeq ($(wildcard $(ROOT)/$(var)/$(var)_VER),)
echo 'Bad dir'
$(var)_ROOT=$SOMEOTHERDIR
else
echo 'Good dir'
$(var)_ROOR=$(ROOT)/$(var)/$(var)_VER
endif
這項艱巨的工作-但我認為它為Im尋找的東西提供了一個很好的主意。 誰能指出我該如何實現? 謝謝
編輯:我在系統上進行了測試,它似乎可以滿足您的需求。
define set_deps
ifeq ($(wildcard $(ROOT)/$(1)/$($(1)_VER)/),)
$(1)_ROOT=$(DEFAULT_DIR)
else
$(1)_ROOT=$(ROOT)/$(1)/$($(1)_VER)/
endif
endef
$(foreach lib, $(EXTERNAL_DEPS), $(eval $(call set_deps,$(lib))))
$(foreach lib, $(EXTERNAL_DEPS), $(eval $(info $(lib) => $($(lib)_ROOT))))
另外,如果要與可能目錄的列表進行匹配,則可以使用以下內容。
define set_deps
$(1)_ROOT = $(firstword $(wildcard $(ROOT)/$(1)/$($(1)_VER)/) $(DEFAULT_DIR))
endef
該站點可能會幫助:
請注意,在該示例中,foreach調用的結果是存儲的內容,而不是在foreach循環中調用每個函數的副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.