Makefile найти в массиве - PullRequest
       1

Makefile найти в массиве

3 голосов
/ 02 сентября 2011

Если у меня есть что-то вроде этого:

PROJECTS += path/to/first
PROJECTS += path/to/second
PROJECTS += path/to/third

и

LIBS += lib_output/first.lib
LIBS += lib_output/second.lib
LIBS += lib_output/third.lib

Как я могу связать проект с PROJECTS += path/to/first с LIBS += lib_output/first.lib? Есть ли в make-файле что-то вроде хэш-карты? Или возможность поиска по массиву?

Ответы [ 2 ]

12 голосов
/ 02 сентября 2011

Вы можете имитировать таблицы поиска, используя имена вычисляемых переменных и тот факт, что имена переменных могут включать некоторые специальные символы , такие как точка и косая черта:

PROJECTS += path/to/first
PROJECTS += path/to/second
PROJECTS += path/to/third

LIBS += lib_output/first.lib
LIBS += lib_output/second.lib
LIBS += lib_output/third.lib

lookup.path/to/first  := lib_output/first.lib
lookup.path/to/second := lib_output/second.lib
lookup.path/to/third  := lib_output/third.lib

path := path/to/first
$(info ${path} -> ${lookup.${path}})
path := path/to/second
$(info ${path} -> ${lookup.${path}})
path := path/to/third
$(info ${path} -> ${lookup.${path}})

Выходы:

$ make
path/to/first -> lib_output/first.lib
path/to/second -> lib_output/second.lib
path/to/third -> lib_output/third.lib
0 голосов
/ 04 сентября 2011

Я не уверен, что полностью понимаю ваш вопрос, но я думаю, что вам может понадобиться функция word (это может быть расширение GNU make):

$(word 2, $(PROJECTS)) возвращает path/to/second,
$(word 2, $(LIBS)) возвращает lib_output/second.lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...