1

nmake 呼び出し間でマクロを転送するにはどうすればよいですか?

私たちが持っているとしましょう

--- a.mak ---

some_variable = value

all:
   nmake -f b.mak

--- END ---

--- b.mak ---

all:
   @echo some_variable = WHAT TO PUT HERE TO GET VALUE OF some_variable?

--- END ---

set および setx コマンドを使用するなど、さまざまなことを試していましたが、親メイクファイルに設定された変数の値は、その中から呼び出されるメイクファイルには表示されません。

4

2 に答える 2

1

再帰呼び出しnmakeに関する MSDN の情報は次のとおりです。

再帰マクロを使用して、NMAKE を再帰的に呼び出します。再帰セッションは、コマンド ラインおよび環境変数マクロと Tools.ini 情報を継承します。これらは、makefile で定義された推論規則や .SUFFIXES および .PRECIOUS 仕様を継承しません。マクロを再帰 NMAKE セッションに渡すには、再帰呼び出しの前に SET で環境変数を設定するか、再帰呼び出しのコマンドでマクロを定義するか、Tools.ini でマクロを定義します。

したがって、次のようにa.makなります。

# ---- a.mak ----
some_variable = value

all:   
    nmake -f b.mak some_variable=$(some_variable)
#--- END ---

また、setソマンドを使用して変数を環境に入れることも同様に機能しますが、nmake自動的に環境変数名を大文字にします (システムでは何らかの理由で小文字である " " のような奇妙な名前でもwindir)、大文字と小文字が区別されます。したがって、環境変数を使用するには、変数を大文字で使用する必要があります。

MSDN から:

継承された名前は大文字に変換されます。継承は前処理の前に発生します

したがって、b.makコマンドラインで明示的にではなく、環境を使用して変数を渡す場合は、次のようになります。

#--- b.mak ---
all:
   @echo some_variable is: $(SOME_VARIABLE)
#--- end ---

このため、nmake マクロ名をすべて大文字の命名規則で標準化することは、おそらく悪い考えではありません。

于 2009-04-28T21:24:13.233 に答える
0

make を再帰的に呼び出さないことを検討する必要があるかもしれません。論文Recursive Make Considered Harmful を参照してください。ルールが 1 つの最上位の makefile でのみ定義されているというだけで、既に持っている (make に含まれる) makefile と同様のモジュラー ファイルを引き続き使用できます。

于 2009-04-29T00:14:13.403 に答える