GNU make では、変数宣言にパターン置換を使用できますか? たとえば、これは有効なターゲットです
obj/%.o: ソース/%.c gcc -c src/$*.c -o obj/$*.o
しかし、これは機能しません
BUILD_% = gcc -c src/%.c -o obj/%.o
GNU make では、変数宣言にパターン置換を使用できますか? たとえば、これは有効なターゲットです
obj/%.o: ソース/%.c gcc -c src/$*.c -o obj/$*.o
しかし、これは機能しません
BUILD_% = gcc -c src/%.c -o obj/%.o
ここには 3 つの個別の質問があります。
最初:レシピ%
で使用および解釈できますか? 例えば:
gcc -c src/%.c -o obj/%.o
答えは、それができないということです: ルールの解決中に%
、ターゲットと前提条件で評価されますが、レシピでは評価されません。代わりに、 を使用する必要があります$*
。これは、大まかに言えばまったく同じではありません。
2番目(あなたの質問を正しく理解していれば):レシピの定義に変数を使用できますか?例えば:
BUILD = gcc -c src/$*.c -o obj/$*.o
obj/%.o: src/%.c
$(BUILD)
はい、できます。
3番目(これがあなたの質問の意図である場合):%
プレースホルダーが引数として機能する変数から取得されるように、ルールを変数でパラメーター化できますか?
いいえ、そうではありません。定義済みの 、、および関数の組み合わせを使用して、$(foreach ...)
$(call ...)
$(eval ...)
変数から取得した値でパラメーター化されたルールを指定できますが、これらの変数の値は、 の値のようにルール解決プロセスによって提供できません%
。