我有一个像这样的makefile:
.SILENT: #don't echo commands as we run them.
###
# here, set $1 (in the latter bash script) to the first make arg.
# $2 to the second one.
# et cetera.
# ($0 being set properly is optional)
###
foo:
echo "you passed to make: $1 $2 $3 $4 $5 $6"
Run Code Online (Sandbox Code Playgroud)
所以我可以做:
make foo
You passed to make: foo
Run Code Online (Sandbox Code Playgroud)
(不要告诉任何人,但我正在创建“给我做三明治”的东西)
不,您无法在 Makefile 中“看到”完整的make命令参数列表。您可以按照在命令行中输入的顺序查看“目标”列表,例如
make a c b d
Run Code Online (Sandbox Code Playgroud)
将产生$(MAKECMDGOALS)与a c b d
.
您可以专门检查make命令行上是否设置了某些内容,例如
make A=B C=D
Run Code Online (Sandbox Code Playgroud)
将产生$(A)与B
,和$(C)用D
。但你永远不会知道它是make A=B C=D
还是make C=D A=B
或make A=F -B C=D A=B
。
如果它真的很重要,您可以将您的 make 包装在一个 shell 脚本中,并拥有它的全部功能:
make.sh a A=B c
Run Code Online (Sandbox Code Playgroud)
电话
#!/bin/bash
make MAKECMDLINE="$*" $*
Run Code Online (Sandbox Code Playgroud)
现在在 Makefile 中,您可以根据需要解析$(MAKECMDLINE)。
请注意,某些命令行选项可能会禁用您的解析器,例如
make A=B C=D -h
Run Code Online (Sandbox Code Playgroud)
永远不会读取您的 Makefile,并且
make A=B C=D -f /dev/null
Run Code Online (Sandbox Code Playgroud)
也会忽略你的 Makefile。