我是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等”。抱歉混乱!
答案 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))
如果TOOL
为toolA
,它将使用参数-a1 -a2
,如果TOOL
为toolB
则会使用参数-b1 -b2
}。