Что я хотел бы сделать с GNU Make, так это иметь единую базовую цель, которую можно вызывать с небольшими вариациями в зависимости от фактической вызываемой цели. Для этого я попытался использовать целевые переменные, как показано ниже (минимальный пример):
Makefile
:
.PHONY: all _base_target target1 target2
all: target1 target2
target1: MYVAR="first"
target1: _base_target
target2: MYVAR="second"
target2: _base_target
_base_target:
echo "MYVAR is $(MYVAR)"
Итак, это отлично работает для работы с одной целью:
$ make target1
echo "MYVAR is "first""
MYVAR is first
$ make target2
echo "MYVAR is "second""
MYVAR is second
Однако, когда я хочу, чтобы обе цели запускались (через all
или по отдельности):
$ make -n all
echo "MYVAR is "first""
$ make -n target1 target2
echo "MYVAR is "first""
make: Nothing to be done for `target2'.
Как я могу настроить свой Makefile, чтобы он запускал базовую цель для каждого? т.е. Я хотел бы, чтобы make all
вел себя так, как если бы я сделал make target1; make target2
.
Вариант .PHONY
кажется недостаточным, по-видимому. Поскольку мне не хватает опыта работы с GNU Make с точки зрения словарного запаса, мне трудно найти полезные результаты для этого с помощью Google.
Попытка с двойным двоеточием
В ответ на ответ об использовании двойных двоеточий ниже.
[...]
all:: target1
all:: target2
[...]
дает тот же результат.
Замена всех одинарных двоеточий двойными колониями также дает тот же результат.