【问题标题】:Passing a command line argument as target in Makefile在 Makefile 中将命令行参数作为目标传递
【发布时间】:2012-02-02 16:44:24
【问题描述】:

为了简化我的问题,如果我有如下的 Makefile

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

    make foo

Make foo 将从foo.c 构建可执行文件foo。没有问题。如果我要更改 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 byfoo'。停止。`

为什么$(TARG)没有在 Makefile 的 target 规则中得到扩展?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    我觉得你需要Static Pattern rule

    TARG=$(EXE)
    
    $(TARG):%: %.c
      gcc -o $@ $<
    
    make EXE=foo
    

    【讨论】:

      【解决方案2】:

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

      .DEFAULT_GOAL := $(EXE)
      

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

      【讨论】:

        猜你喜欢
        • 2013-03-08
        • 2018-04-18
        • 2011-09-10
        • 2013-07-15
        • 1970-01-01
        • 2015-04-11
        • 2016-02-07
        • 2016-10-10
        相关资源
        最近更新 更多