5

我是 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 etc etc”。对困惑感到抱歉!

4

3 回答 3

5

您只是缺少一些括号:

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

PS您可以使条件更严格(并删除一些冗余):

ci:
ifeq ($(TOOL), toolA)
    [syntax for tool (A)]
else
    [syntax for tool (B)
endif
于 2011-06-14T19:11:04.713 回答
2

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

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

  ci:
       $(TOOL) args

这可以用TOOLARGS宏之类的东西来扩展,所以像

  ci:
       $(TOOL) $(TOOLARGS)

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

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

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

于 2011-06-14T19:10:19.533 回答
1

试试这个:

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

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

现在 if TOOListoolA它将使用 args -a1 -a2, if TOOLis toolBthen 它将使用 args -b1 -b2

于 2011-06-14T21:24:58.373 回答