Эта проблема:
Можно ли дать цели другое имя или псевдоним, чтобы ее можно было вызывать, используя либо исходное имя цели, либо псевдоним.
Например что-то вроде
/very/long/path/my_binary: dep_a dep_b dep_c
# Compile
# Desired command
ALIAS my_binary = /very/long/path/my_binary
# NOTE: Notice the use of 'my_binary' in the dependencies
data1: my_binary datafile
# Build data file using compiled my_binary
Попытка 1: .ФОНИЯ
Я попытался использовать цель .PHONY
:
.PHONY: my_binary
my_binary: /very/long/path/my_binary
Это прекрасно работает при вызове из командной строки:
# Runs rule 'my_binary' and then *only* runs rule '/very/long/path/my_binary'
# if the rule '/very/long/path/my_binary' needs updating.
make my_binary
Однако это не работает, когда псевдоним my_binary
указан как зависимость:
# *Always* thinks that rule 'data1' needs updating, because it always thinks that
# the .PHONY target 'my_binary' "needs updating". As a result, 'data1' is
# rebuilt every time.
make /very/long/path/my_binary
Возможен взлом?
Возможный хак - использовать пустую цель, как это предлагается в ответ на этот вопрос, но для этого потребуется ввести поддельные файлы с именами, соответствующими псевдониму:
my_binary: /very/long/path/my_binary
touch my_binary
Это загромождает главный каталог файлами! Размещение поддельных файлов в подкаталоге лишило бы цели, так как псевдоним должен был бы называться «каталог/my_binary».