Мой make-файл не может определить марку и версию ld.
Типичная строка версии (я ожидаю) выглядит следующим образом. Я ищу (1) GNU ld, привязанный слева, (2) версию где-то посередине:
$ ld -v
GNU ld (GNU Binutils for Ubuntu) 2.20.1-system.20100303
Не совпадает при использовании звездочки. Ниже счет (от -c) всегда равен 0.
EGREP = egrep
GNU_LD210_OR_LATER = $(shell $(LD) -v 2>&1 | $(EGREP) -i -c "^gnu ld * (2.1[0-9]|2.[2-9])")
Если я уберу звездочку и версию, я смогу поймать часть того, что ищу:
GNU_LD = $(shell $(LD) -v 2>&1 | $(EGREP) -i -c "^gnu ld")
Позже я продолжу использовать флаги, похожие на:
ifeq ($(GNU_LD210_OR_LATER),1)
LDFLAGS += -Wl,-z,nodlopen
endif
ifneq ($(GNU_LD212_OR_LATER),0)
LDFLAGS += -Wl,--exclude-libs,ALL
endif
ifneq ($(GNU_LD215_OR_LATER),0)
LDFLAGS += -Wl,-z,relro -Wl,-z,now
endif
Есть ли проблемы с регулярным выражением, которое я хочу использовать? Или есть проблемы с интерпретатором регулярных выражений оболочки? (Я также понимаю, что должен использовать \.
- для ясности опущен).