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

誰かがこのようなものを適切に実装するための最良の方法を知っていますか?

ありがとう!!

編集:ツールの構文は1行よりも複雑です。「toolAargsなど」だけでなく、複数行になることもあります。混乱させて申し訳ありません!

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))

これで、 TOOLisの場合はtoolAargs が使用され、 is の-a1 -a2場合TOOLはargstoolBが使用されます-b1 -b2

于 2011-06-14T21:24:58.373 に答える