makefileに変数があり、unsetターゲットaを指定し、それぞれのmakefile内で正しい値を使用するb(またはまったく使用しない)ように、または再定義します。cMY_VARIABLE
私が次のように実行make fooした場合:
export MY_VARIABLE := 'false'
foo: prep_foo dist
prep_foo:
$(shell export MY_VARIABLE='true')
echo ${MY_VARIABLE}
dist: a b c
a:
make -C a/src
b:
make -C b/src
c:
make -C c/src
私はこの出力を取得します:
export MY_VARIABLE='true'
echo 'false'
false
...
代わりにmake foo、次のmakefileを使用して実行する場合:
export MY_VARIABLE := 'false'
foo: prep_foo dist
prep_foo:
$(shell unset MY_VARIABLE)
echo ${MY_VARIABLE}
dist: a b c
a:
make -C a/src
b:
make -C b/src
c:
make -C c/src
次の出力が得られます。
make: unset: No such file or directory
echo 'false'
false
...
MY_VARIABLEターゲット(fooこの場合はなど)を指定するときに、設定を解除または再定義するにはどうすればよいですか?
編集
これが私が避けたい状況です:
dist: a b c
foo: a_foo b_foo c_foo
a:
make -C a/src
...
a_foo
make -C a_foo/src
ターゲットが特定の変数に異なる値を使用するようにしたいaので、そのターゲットのmakefileでコンパイルが異なる方法で処理されます。
また、ターゲット内の変数exportや変数のようには見えません。unset例えば:
dist: a b c
foo: a_foo b_foo c_foo
a:
make -C a/src
...
a_foo:
export MY_VARIABLE='true'; make -C a/src
これを行おうとすると、次のようなエラーが発生しますexport MY_VARIABLE='true'(使用しようとすると同様にunset)。
Makefile:16: *** unterminated variable reference. Stop.
これは私がやろうとしていることを明確にするのに役立ちますか?
編集2
touchファイルを-esし、子ターゲットmakefile(ファイルの存在をチェックする)を実行しようとするターゲットを試しました。
foo: prep_foo
prep_foo:
touch a/src/.foo
make -C a/src
を介してこれを実行しようとするとmake foo、次のエラーが発生します。
Makefile:14: *** commands commence before first target. Stop.
makeからステートメントを削除すると、エラーメッセージが表示されずにファイルを作成できますが、ターゲットの作成をトリガーできないprep_fooため、これは役に立たないようです。toucha
次の場合、同じcommands commence before first targetエラーメッセージが表示されます。
foo: prep_foo a
prep_foo:
touch a/src/.foo
touch子ターゲットに状態を伝達するために使用する例はありますか?