Ответ 1
Мне нравится следующее:
ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" ""
endif
Как и для метода $(strip), но используя более интуитивно понятное ключевое слово $(или
Я хотел бы включить подробный компиляции в моем make файле, но я не могу понять, как сделать условный OR
.
Позвольте мне объяснить: я хочу, чтобы указать подробную компиляцию, установив V=1
или VERBOSE=1
. Я хочу сохранить VERBOSE=1
доступным, потому что у нас есть некоторые скрипты, которые его используют (и использовать другие make файлы, которые знают только VERBOSE
)
Таким образом, результат должен состоять в том, что эти две команды одинаковы:
make all VERBOSE=1 # pain to write
make all V=1
Теперь мой make файл выглядит так:
ifdef VERBOSE
[issue compilation commands with verbose mode]
endif
То, что я хотел бы достичь, близок к препроцессору в C:
if defined(VERBOSE) || defined(V)
[issue compilation commands with verbose mode]
endif
Вы знаете, как это сделать?
Мне нравится следующее:
ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" ""
endif
Как и для метода $(strip), но используя более интуитивно понятное ключевое слово $(или
Насколько я знаю, условный материал в GNU make не допускает OR и ANDS. Вы всегда можете сделать что-то вроде:
ifdef VERBOSE
DOVERBOSE = yes
endif
ifdef V
DOVERBOSE = yes
endif
ifeq( $DOVERBOSE, yes )
main verbose stuff here
endif
но я не понимаю, почему вам нужно сначала ввести (вряд ли самодокументирующее) определение V.
Мне нравится подход Нила Баттерворта, но если вы действительно хотите сделать это в описываемом вами стиле, это даст вам OR:
ifneq "$(strip $(VERBOSE) $(V))" ""
[be verbose]
endif
VERBOSE := $(or $(VERBOSE),$(V))
... затем...
ifeq ($(VERBOSE),1)
#Conditional stuff
endif
Хорошо, очень поздно для вечеринки, но я наткнулся на это и хотел добавить другое решение для других, которые искали, как добавить логику в make файлы: в основном, делать логику в оболочке и получать выход таким образом.
ifneq ( $(shell ( [ $(VERBOSE) ] || [ $(V) ] ) && echo y ),)
кажется более запутанным, но если у вас есть оператор if с множеством ands и ors, это обеспечивает большую гибкость и будет легче читать, чем вложенные операторы $(и.. $(или...)).