Makefile中规则的参数

17

我需要制作一个Makefile,并且它应该有一个“run”规则。但是,运行需要一些参数。

有人知道如何在运行Makefile中的规则时传递参数吗?我希望能够通过键入“make run foo bar”来带参数地运行“run”规则。

我尝试了这个,但是它没有起作用:

run:
    make compile
    ./scripts/runTrips $1 $2 $PLACES $OUT $VERS
我想提供的参数是第一个和第二个。
2个回答

30

当向make命令传递参数时,像处理其他内部make变量一样引用它们。

如果您的makefile如下所示:

run:
        script $(param1) $(param2)

您可以使用以下语法调用:

$> make run param1=20 param2=30

而且 make 应该这样调用脚本:

script 20 30

2
它实际上可以工作,但我能否在写入以下命令时运行它: $> make run <param1> <param2>(而不是param1 = <param1> ....) - amit
6
@amit gr: 不,类似于“make run <param1>”这样的命令是不可能的,因为“make”会将其解释为目标名称。例如,考虑“make all install”:首先处理目标“all”,然后是目标“install”。所有想要作为参数的内容都必须通过“key=value”语法(或具有相同名称的环境变量)传递。 - DarkDust

4

Make本身不像脚本一样提供传递参数的功能。通常情况下,make的使用方式如下: 你先配置项目,然后运行简单的'make'命令。配置可以通过运行shell脚本'configure'来完成。这个脚本是可以传递参数的。例如:

./configure param1 param2
make run

配置脚本必须解析参数并将它们写入config.mk。config.mk 必须包含以下内容:

PARAM1 = val1
PARAM2 = val2

您的Makefile必须包含config.mk:
TOP = .
include $(TOP)/config.mk

run:
    make compile
    ./scripts/runTrips $(PARAM1) $(PARAM2) $(PLACES) $(OUT) $(VERS)

在您的“configure”脚本中,您还可以检查参数是否正确,并进行其他检查和计算。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接