Функция подстановочного знака Makefile оценивается как true для пустой строки - PullRequest
0 голосов
/ 12 января 2020

Использование GNU Make 4.2.1

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

ifeq ($(wildcard *.remote.server.com),$(HOSTNAME))
        echo "ON REMOTE SERVER"
else
        echo "NOT ON REMOTE SERVER"
endif

Похоже, это будет работать, но на моей локальной машине переменная окружения HOSTNAME не установлена и тест ifeq оценивается как true и печатает ON REMOTE SERVER.

Это не имеет смысла для меня; *.remote.server.com сравнивается с пустой строкой и должен оценить false и вывести NOT ON REMOTE SERVER.

Я что-то упускаю из-за unix переменных среды, wildcard, или создания условий, или всех трех?

Редактировать : Проблема решена. Узнал, что это не то место, где можно использовать функцию wildcard. Вместо этого использовалось что-то похожее на следующую строку ifeq "$(shell hostname | sed -e 's/.*.remote.server.com/remote.server.com/')" "remote.server.com"

На основании этого ответа: Как использовать bash регулярное выражение внутри Makefile Target

1 Ответ

1 голос
/ 12 января 2020

Вы можете просто напечатать значения этих вещей, чтобы увидеть, что они есть. Что-то вроде $(info wildcard='$(wildcard *.remote.server.com)' hostname='$(HOSTNAME)')? Причина такого поведения полностью зависит от вашей локальной системы, к которой у нас нет доступа.

Однако я не понимаю, почему вы говорите, что *.remote.server.com сравнивается с пустой строкой . Вы написали $(wildcard *.remote.server.com) и, вероятно, у вас нет файла, который соответствует глобу *.remote.server.com, что означает, что функция wildcard расширяется до пустой строки.

Я думаю, вы можете быть озадачены что делает функция wildcard: что вы ожидали от нее? Он не имеет ничего общего с именами хостов.

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