makefileに変数があり、unset
ターゲットa
を指定し、それぞれのmakefile内で正しい値を使用するb
(またはまったく使用しない)ように、または再定義します。c
MY_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
ため、これは役に立たないようです。touch
a
次の場合、同じcommands commence before first target
エラーメッセージが表示されます。
foo: prep_foo a
prep_foo:
touch a/src/.foo
touch
子ターゲットに状態を伝達するために使用する例はありますか?