Makefile-获取传递给make的参数

问题描述 投票:7回答:2

我有一个这样的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

((不告诉任何人,但我正在创建“给我做三明治”的东西)]

makefile
2个回答
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=Bmake 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
投票

[Edit 2019:哇,过去的我太蠢了。


好的,我想出了自己的问题。

您可以创建一个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的参数是否是“让我成为三明治”,如果不是,请使用所有的参数调用make。

如果要告诉make为某些参数运行规则:

if [ $1 = 'foo' ]; then make somerule fi

© www.soinside.com 2019 - 2024. All rights reserved.