1

GNU make では、変数宣言にパターン置換を使用できますか? たとえば、これは有効なターゲットです

obj/%.o: ソース/%.c
    gcc -c src/$*.c -o obj/$*.o

しかし、これは機能しません

BUILD_% = gcc -c src/%.c -o obj/%.o

4

1 に答える 1

0

ここには 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 ...)変数から取得した値でパラメーター化されたルールを指定できますが、これらの変数の値は、 の値のようにルール解決プロセスによって提供できません%

于 2013-03-04T15:53:25.783 に答える