4

パターン依存変数の依存関係を使用してGNUmakeパターンルールを定義したいと思います。私が欲しいのはこのようなものです:

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)

そして後で次のようなものを定義する

FOO_EXE_SOURCES = src/Foo.cs
all: Foo.exe

提示されたルールは構築するために機能します。ルールの本体では、$($*_EXE_SOURCES)変数はに展開され$(FOO_EXE_SOURCES)、はに展開されsrc/Foo.csます。ただし、依存関係は適切に拡張されません。src / Foo.csを変更しても、Foo.exeは再構築されません。

これは実際にはmakeで実行できないと思いますが、おそらく誰かが同じようなmakeフラグメントを持っていますか?

4

1 に答える 1

8

「二次拡張」を使用できます。このようなものはあなたが探しているものを達成するはずです:

Foo_EXE_SOURCES := foo.cs bar.cs baz.cs
all: Foo.exe

.SECONDEXPANSION:
%.exe: $$($$*_EXE_SOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)

二次拡張を有効にする$*と、前提条件リストで自動変数(この場合は)を使用できるようになります。これは、他の方法では機能しないものです。

于 2009-12-07T03:13:00.073 に答える