Я использую Makefile, который я откуда-то получил, и он довольно большой. Я также нашел некоторые вещи, которые я хотел бы иногда менять в make-файле - и самый простой способ сделать это для меня - определить (или нет) переменную (switch) (скажем, OVWRCHOICE
) в начале Makefile; а затем в коде make-файла сделайте что-то вроде:
ifdef OVWRCHOICE
MYOPT = override
....
endif
... что все прекрасно и хорошо.
Дело в том, что в конечном итоге мне также необходимо изменить части в части "переопределить", поэтому я хотел бы, чтобы она была в начале файла. Итак, поскольку эта часть «переопределения» содержит несколько команд make
- я попытался использовать define
, чтобы иметь переменную, которая будет содержать команды (которые будут выполняться в части ifdef OVWRCHOICE...
).
Итак, я пришел к этому простому примеру:
# uncomment as needed;
OVWRCHOICE = YES
define SET_OVWRCHOICE
MYOPT = override
endef
export SET_OVWRCHOICE
# ... many lines of code ...
MYOPT = default
# ... many lines of code...
# without indent: Makefile:18: *** missing separator. Stop.
# with tab indent: Makefile:18: *** commands commence before first target. Stop.
ifdef OVWRCHOICE
$(SET_OVWRCHOICE)
endif
all:
@echo $(MYOPT)
... что не так с отмеченными ошибками. Конечно, если вместо этого я использую первый фрагмент в сообщении, все работает нормально, и make
выводит ожидаемый результат: «переопределить».
Как бы я поступил в достижении чего-то подобного? Не уверен, что «включение» или «выполнение» «команд Makefile» являются даже правильными терминами в этом контексте; поэтому мне трудно найти отправную точку для поиска:)