我有一个像这样的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"
所以我能做到:
make foo
You passed to make: foo
(不要告诉任何人,但我要创造一个让我成为三明治的东西)
答案 0 :(得分:4)
不,你不能"看" Makefile中 make 命令的完整参数列表。你可以看到"目标"按照它们在命令行输入的顺序,例如
make a c b d
将使用a c b d
生成 $(MAKECMDGOALS)。
您可以专门检查 make 命令行中是否设置了某些内容,例如
make A=B C=D
将使用B
生成 $(A),使用D
生成 $(C)。但您永远不会知道它是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
来电
#!/bin/bash
make MAKECMDLINE="$*" $*
现在在Makefile中,您可以根据需要解析 $(MAKECMDLINE)。
请注意,某些命令行选项可能会禁用您的解析器,例如
make A=B C=D -h
永远不会读取您的Makefile,
make A=B C=D -f /dev/null
也会忽略你的Makefile。
答案 1 :(得分:2)
好吧,我想出了自己的问题。
您可以创建一个shell脚本来完全控制:
$ cat make.sh
if [ $1 = 'me' ]; then
if [ $1 = 'a' ]; then
if[ $3 = 'sandwich' ];then
if [ `whoami` = 'root' ];
echo "Okay."
#todo: echo an actual sandwich in ascii.
else
echo "what? Make it yourself!"
fi
exit 0
fi
fi
fi
make $@
$ echo 'alias make="/home/connor/make.sh"' >> .bashrc
$ source .bashrc
...田田!现在当你调用make时,它实际上会调用shell脚本,检查你传递的参数是否“让我成为一个三明治”,如果不是,请调用make并使用所有的args。
如果你想告诉make为某些args运行规则:
if [ $1 = 'foo' ]; then
make somerule
fi