Makefile Linux, как выполнить функцию для каждой переменной - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь настроить Makefile с зависимостями. Зависимости указаны в переменной.

MATH_VER=1.1
EXTERNAL_DEPS=MATH GC LOG

Я хочу, чтобы он запускал функцию, которая пытается выяснить расположение каждой из внешних библиотек на основе того, что доступно. Поэтому я добавил набор правил,

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

Эта работа до сих пор - но я думаю, что она дает хорошее представление о том, что я ищу. Может кто-нибудь указать мне, как это можно сделать? Спасибо

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Редактировать: я проверил это на моей системе, и она, казалось, сделала то, что вам нужно.

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
0 голосов
/ 14 февраля 2012

Этот сайт может помочь:

Обратите внимание, что в этом примере результатом вызова foreach является то, что сохраняется, а не побочные эффекты вызова каждой функции в цикле foreach..

...