Това, което бих искал да направя с 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
[...]
дава същия резултат.
Замяната на всички двоеточия с двойни точки също дава същия резултат.