簡體   English   中英

Makefile Linux如何為每個變量執行功能

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

確保查看eval函數文檔

另外,如果要與可能目錄的列表進行匹配,則可以使用以下內容。

 define set_deps
     $(1)_ROOT = $(firstword $(wildcard $(ROOT)/$(1)/$($(1)_VER)/) $(DEFAULT_DIR))
 endef

站點可能會幫助:

請注意,在該示例中,foreach調用的結果是存儲的內容,而不是在foreach循環中調用每個函數的副作用。

暫無
暫無

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

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