12

現在のプロジェクトで非再帰的な make ビルド システムを実装しようとしています。私が苦労しているのは、変数のスコープです。多くの場合、変数は前提条件ではなくターゲットを定義するため、ターゲット固有の変数は私のニーズに適合しません。私が必要とするのは:

Makefile1:

SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))

Makefile2:

#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here

そして、私が望む出力は「original_value」です。

それを実現するための戦略はありますか?

EDIT:私が今のところ来た唯一の解決策は、特定のMakefileの最後にすべてのインクルードを配置し、即時の変数割り当てを使用するように自分自身を強制して整理することです:=

4

1 に答える 1

9

1つの戦略は、グローバル変数しかない場合の変数名の衝突に対する昔ながらの解決策です。つまり、貧乏人の名前空間の形式で変数名にプレフィックスを追加します。

Makefile1:

Makefile1_SOMEVAR := original_value
include Makefile2
$(warning $(Makefile1_SOMEVAR))

Makefile2:

# no magic needed
Makefile2_SOMEVAR := included_value
# rest of Makefile2 uses $(Makefile2_SOMEVAR) of course

ちょっとプレスト、このような慣習では、各makefileが独自のローカル変数(または、少なくとも、他のmakefileと衝突しない名前空間内の独自の変数)を持っているかのようです。

于 2012-10-19T09:36:26.223 に答える