Создайте LDFLAGS из списка полных путей к библиотекам в Makefile - PullRequest
0 голосов
/ 27 марта 2019

Я хочу построить свои флаги компоновщика LDFLAGS из списка библиотек с их полными путями. Вот где / почему я застрял. (Названия библиотек в стиле Linux, но, думаю, это не должно иметь значения, как решить эту проблему.)

FULL_LIBS = \
    ./path1/libone.a \
    ../../path2/libtwo.a
# etc.    

LIB_DIRS = $(dir $(FULL_LIBS))
LIB_NAMES = $(basename $(notdir $(FULL_LIBS)))
LIB_NAMES_TRIMMED = # zzz trim leading "lib" somehow??? This is what I don't know how to do, or at least the best way

LDFLAGS += \
    $(addprefix -L, $(LIB_DIRS)) \
    $(addprefix -l, $(LIB_NAMES_TRIMMED))

Желаемый результат, если он неочевиден, должен быть похож на

LDFLAGS += -L./path1 -L../../path2 -lone -ltwo

Не уверен, что я НЕОБХОДИМ регулярные выражения (или sed / awk / grep), поэтому я пока удержу этот тег ().

1 Ответ

1 голос
/ 27 марта 2019

Вы можете использовать возможности обработки текста в make (https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#Text-Functions):

LIB_NAMES_TRIMMED = $(subst lib,,$(LIB_NAMES))

Хотя это может не сработать, если в других местах в именах библиотек появится строка "lib". Чтобы избежать этого, мы можем использовать 2 шага:

LIB_NAMES_TRIMMED = $(basename $(notdir $(subst /lib,/,$(FULL_LIBS))))

Как объяснил Мэтт, с patsubst это еще проще:

LIB_NAMES_TRIMMED = $(patsubst lib%,%,$(LIB_NAMES))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...