Не совсем. Программа make интерпретирует все аргументы (которые не содержат =
) как целевые имена для сборки, и вы не можете переопределить это. Таким образом, даже если вы можете получить список аргументов, приведенных в командной строке (через переменную $(MAKECMDGOALS)
, специфичную для GNU make), вы не можете запретить считать эти аргументы целевыми.
Вы могли бы сделать что-то вроде этого, что невероятно хакерски:
KNOWN_TARGETS = target
ARGS := $(filter-out $(KNOWN_TARGETS),$(MAKECMDGOALS))
.DEFAULT: ;: do nothing
.SUFFIXES:
target:
$(COMMAND) $(ARGS)
(непроверенные). Проблема здесь в том, что вы должны постоянно обновлять KNOWN_TARGETS
со всеми «реальными» целями, чтобы вы могли удалить их из списка целей, приведенного в командной строке. Затем добавьте цель .DEFAULT
, которая будет запускаться для любой целевой марки, которая не знает, как создать, что ничего не делает. Сбросьте мета-цель .SUFFIXES
, чтобы удалить встроенные правила.
Я подозреваю, что у этого все еще будут странные крайние случаи, когда это не работает.
Также обратите внимание, что вы не можете просто добавить опции, такие как --help
, в командную строку make, потому что make будет интерпретировать их сам. Вам нужно будет поставить перед ними префикс --
, чтобы заставить make игнорировать их:
make target -- --help
Другой вариант - добавить цель, подобную этой:
target%:
$(COMMAND) $*
Тогда вы можете запустить это:
make "target --help"
Но вы должны включить кавычки.
В общем, я просто рекомендую вам пересмотреть то, что вы хотите сделать.