0

次のような行があるメイクファイルを使用しています

VAR=$(MVAR) command1;

command1 が実行されると、command1 が正常に完了するために必要な MVAR によって割り当てられている値を VAR に保持させたいと考えています。しかし残念なことに、VAR には command1 の実行中にいくつかのデフォルト値が含まれています。つまり、VAR は、command1 の実行中に割り当て中に割り当てられた値を保持できません。

いずれかのシェルで同じコマンドを実行すると、VAR の値が保持され、command1 が正常に実行されます。

makefileで実行するためにほぼすべてを試しました。誰かがgnu makefileでのこの動作の背後にある理由と可能な解決策を説明してもらえますか. Linux を OS として、ksh を Makefile のシェルとして使用しています。

4

3 に答える 3

0

どんなことを期待MYVARしていますか?シェルにとって意味のあるスペースやその他の文字が含まれている場合、実行していることは機能しません。あなたはそれを引用してみることができます:

        VAR='$(MVAR)' command1

それがうまくいくかどうかを確認してください。

また、これは、シェルが標準のPOSIX Bourne-Shell派生物であるかどうかによって異なります(sh、bash、ksh、zshはすべて適格ですが、Windows cmdプロセッサは適格ではありません)。

于 2013-03-18T22:39:46.793 に答える
0

ルール内のコマンドについて話している場合は、セミコロンを追加 (または移動) するだけです。

VAR=$(MVAR); command1

しかし、私はもっと関与している可能性があると思います。これで問題が解決しない場合は、より詳しい状況 (makefile と に関する情報などcommand1) をお知らせください。

于 2013-03-18T19:59:38.773 に答える
0

VAR:=$(MYVAR) を試しましたか? (つまり:=、の代わりに=)

これにより、遅延評価されるのではなく、VAR にすぐに値が割り当てられます。

于 2013-03-29T23:02:38.930 に答える