开发者

Makefile Rules and If Statements -- How?

开发者 https://www.devze.com 2023-03-13 04:12 出处:网络
I\'m new to Makefiles so please bear with me. I need to modify a Makefile so some rules call different utilities depending on a variable.

I'm new to Makefiles so please bear with me.

I need to modify a Makefile so some rules call different utilities depending on a variable.

Right now, a rule looks like:

ci:
    [shell syntax for tool (A)]

But now I ne开发者_如何学JAVAed ci to have a different syntax depending on the variable. So I define a global variable at the top of the file:

TOOL = toolA

or

TOOL = toolB

Ideally what I'd like is something like this, but obviously it doesn't work:

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

Does anyone know the best way to implement something like this properly?

Thanks!!

EDIT: The tool syntax is more complicated than one line. Sometimes its multiple lines and not just "toolA args etc etc". Sorry for the confusion!


You're just missing some parentheses:

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

P.S. You can make the conditional a little tighter (and remove a little redundancy):

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


Usually, you do that with a macro:

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

  ci:
       $(TOOL) args

That can be extended with something like a TOOLARGS macro, so something like

  ci:
       $(TOOL) $(TOOLARGS)

Then you can modify the makefile, or put the macros on the command line

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

If you want to encapsulate it, you could use an if to set the arguments.


Try this:

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

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

Now if TOOL is toolA it will use the args -a1 -a2, and if TOOL is toolB then it will use the args -b1 -b2.

0

精彩评论

暂无评论...
验证码 换一张
取 消