У меня есть несколько целей с разными предпосылками, но одно и то же правило здания, которое я хочу повторно использовать для всех моих целей.
Вот Makefile я написал для этой задачи:
test1 := a b
test2 := b c
all: test1 test2
test1 test2: $([email protected])
@echo [email protected]
@echo $([email protected])
@echo $^
Если я бегу make
я получить следующий вывод:
test1
a b
test2
b c
Что я ожидаю:
test1
a b
a b
test2
b c
b c
Как вы можете видеть, проблема $^пуста. Похоже, я не могу использовать $([email protected])
в правой части правила, потому что он просто расширяется до нуля, поэтому $^
пуст, и поэтому make
даже не предупредит меня, что нет целей для a
b
и c
. Обратите внимание, что внутри тела $ ($ @) работает так, как ожидалось.
Я хочу $([email protected])
быть equivalet к $(test1)
, когда я звоню make test1
и к $(test2)
, когда я звоню make test2
так что мой Makefile будет эквивалентен следующим Makefile:
test1 := a b
test2 := b c
all: test1 test2
test1: $(test1)
<build-command>
test2: $(test2)
<the same build-command>
Но я не хочу повторять эти 2 строки для каждого testn
У меня есть одно правило сборки для разных целей с разными зависимостями.
извините, если неясно, я обновил вопрос, надеюсь, что сейчас лучше – DartLenin
спасибо, этот волшебный второй вариант был именно тем, что я искал – DartLenin