在Makefile中将命令行参数作为目标传递

时间:2012-02-02 16:44:25

标签: makefile gnu-make

为了简化我的问题,如果我有一个Makefile,如下所示

    %: %.c
           gcc -o $@ $<

    make foo

Make foo将从foo构建可执行文件foo.c。没有问题。如果我要更改下面的Makefile,那么我可以从Makefile命令行传递目标

    # To make things little complex
    TARG=$(EXE)
    $(TARG): %.c
            gcc -o $@ $<

    make EXE=foo

以上命令make EXE=foo说:

  

"make: *** No rule to make target %.c, needed by富”。 Stop.`

为什么$(TARG) 在Makefile的target规则中展开?

2 个答案:

答案 0 :(得分:2)

我认为你需要Static Pattern rule

TARG=$(EXE)

$(TARG):%: %.c
  gcc -o $@ $<

make EXE=foo

答案 1 :(得分:1)

只需保留第一个示例中的代码,然后添加以下行:

.DEFAULT_GOAL := $(EXE)

或者(实际上是相同的)在任何其他规则之前添加$(EXE) :规则而没有配方。默认情况下,如果在命令行中未指定任何内容,则选择Makefile中定义的第一个目标。