Sub-makeに渡される変数の面白い動作が見えてきました。 make deps
sub-makeで変数を "リセット"しないようにする
/Library/Developer/CommandLineTools/usr/bin/make -C foo
1 - SOME_VAR=something
2 - SOME_VAR=something else
Getting deps
1 - SOME_VAR=something
2 - SOME_VAR=something else
make[2]: `app' is up to date.
を実行しているの
./make_test
| -- foo
| \ -- Makefile
\ -- Makefile
make_test/Makefile
.PHONY: deps
deps:
$(MAKE) -C foo
.PHONY: deps2
deps2: export SOME_VAR=something
deps2:
$(MAKE) -C foo
make_test/foo/Makefile
SOME_VAR ?= something
$(info 1 - SOME_VAR=$(SOME_VAR))
SOME_VAR += else
$(info 2 - SOME_VAR=$(SOME_VAR))
all: deps
@$(MAKE) app
.PHONY: deps
deps:
$(info Getting deps)
app: foo_a foo_b
touch app
foo_a:
touch foo_a
foo_b:
touch foo_b
結果:私は次のようなレイアウトでおもちゃの例のプロジェクトを作りました210
私はSOME_VAR
が二度評価されていることを理解しmake deps2
/Library/Developer/CommandLineTools/usr/bin/make -C foo
1 - SOME_VAR=something
2 - SOME_VAR=something else
Getting deps
1 - SOME_VAR=something else
2 - SOME_VAR=something else else
make[2]: `app' is up to date.
を実行した結果。しかし、deps
の場合、最終結果はsomething else
であり、一方deps2
はsomething else else
となります。 deps
ではなくdeps2
を呼び出すとき
私の質問は、なぜSOME_VAR
の値は、第二の評価の前に「リセット」されません。サブメイクに初期値を渡すのはなぜこの影響を受けますか?
この動作を防止するにはどうしますか?まだサブメイクに値を渡しますか? 'else 'が既に' SOME_VAR'に追加されているかどうかを確認するために 'findstring'を使うことができますが、もっと良い方法があるのでしょうか? – GuessBurger
@GuessBurger私は、あなたの例があまりにもそれに答えるために工夫していると思います。実際にあなたが何をしようとしているかの例はなく、おそらく同じフォルダに再帰するべきではないと思います。 – user657267