Если у меня есть что-то вроде этого:
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-файле что-то вроде хэш-карты? Или возможность поиска по массиву?
PROJECTS += path/to/first
LIBS += lib_output/first.lib
Вы можете имитировать таблицы поиска, используя имена вычисляемых переменных и тот факт, что имена переменных могут включать некоторые специальные символы , такие как точка и косая черта:
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
Я не уверен, что полностью понимаю ваш вопрос, но я думаю, что вам может понадобиться функция word (это может быть расширение GNU make):
word
$(word 2, $(PROJECTS)) возвращает path/to/second, $(word 2, $(LIBS)) возвращает lib_output/second.lib.
$(word 2, $(PROJECTS))
path/to/second
$(word 2, $(LIBS))
lib_output/second.lib