Makefile中规则的参数

ami*_*mit 12 unix makefile

我需要制作一个Makefile,它应该有一个run规则.但是,运行需要一些参数.

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

我试过这个,但它不起作用:

run:
    make compile
    ./scripts/runTrips $1 $2 $PLACES $OUT $VERS
Run Code Online (Sandbox Code Playgroud)

我想要提供的参数是第一个和第二个.

小智 24

将参数传递给make命令时,像引用其他内部make变量一样引用它们.

如果你的makefile看起来像:

run:
        script $(param1) $(param2)
Run Code Online (Sandbox Code Playgroud)

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

$> make run param1=20 param2=30
Run Code Online (Sandbox Code Playgroud)

和make应该调用脚本,如:

script 20 30
Run Code Online (Sandbox Code Playgroud)

  • @amit gr:不,像`make run <param1>`这样的东西是不可能的,因为`make`想把它解释为目标名.考虑例如`make all install`:首先处理目标"all",然后是目标"install".你想成为一种参数的一切都必须通过`key = value`语法(或同名的环境变量)传递. (6认同)
  • 它实际上有效,但是我可以在写入时运行:$> make run <param1> <param2>(而不是param1 = <param1> ....) (2认同)

小智 5

Make 本身不提供像脚本那样的传递参数。通常 make 按以下方式使用:配置项目而不是运行简单的“make”。可以通过运行 shell 脚本“configure”来完成配置。您可以向该脚本传递参数。例如:

./configure param1 param2
make run
Run Code Online (Sandbox Code Playgroud)

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

PARAM1 = val1
PARAM2 = val2
Run Code Online (Sandbox Code Playgroud)

您的 Makefile 必须包含 config.mk:

TOP = .
include $(TOP)/config.mk

run:
    make compile
    ./scripts/runTrips $(PARAM1) $(PARAM2) $(PLACES) $(OUT) $(VERS)
Run Code Online (Sandbox Code Playgroud)

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