Makefile规则和If语句 - 如何?

时间:2011-06-14 19:03:14

标签: unix if-statement makefile tcsh

我是Makefiles的新手所以请耐心等待。

我需要修改Makefile,以便某些规则根据变量调用不同的实用程序。

现在,规则如下:

ci:
    [shell syntax for tool (A)]

但是现在我需要ci根据变量使用不同的语法。所以我在文件的顶部定义了一个全局变量:

TOOL = toolA

TOOL = toolB

理想情况下,我喜欢的是这样的,但显然不起作用

ifeq ($TOOL, toolA)
    ci:
        [syntax for tool (A)]
else
    ci:
        [syntax for tool (B)
endif

是否有人知道正确实施此类内容的最佳方式?

谢谢!

编辑:工具语法比一行更复杂。有时它的多行而不仅仅是“toolA args等”。抱歉混乱!

3 个答案:

答案 0 :(得分:4)

你只是遗漏了一些括号:

ifeq ($(TOOL), toolA)
...

P.S。您可以使条件更严格(并删除一点冗余):

ci:
ifeq ($(TOOL), toolA)
    [syntax for tool (A)]
else
    [syntax for tool (B)
endif

答案 1 :(得分:2)

通常,您使用宏来执行此操作:

  # put tool A or tool B command line here
  TOOL=...

  ci:
       $(TOOL) args

可以使用类似TOOLARGS宏的内容进行扩展,例如

  ci:
       $(TOOL) $(TOOLARGS)

然后你可以修改makefile,或者把宏放在命令行上

  $ make TOOL=... TOOLARGS=...

如果要封装它,可以使用if来设置参数。

答案 2 :(得分:1)

试试这个:

TOOLARGS_toolA = -a1 -a2
TOOLARGS_toolB = -b1 -b2

ci:
        $(TOOL) $(TOOLARGS_$(TOOL))

如果TOOLtoolA,它将使用参数-a1 -a2,如果TOOLtoolB则会使用参数-b1 -b2 }。