0

makefile(GNU Make 3.82を使用しています)で、次のようにサフィックスルールが設定されていると仮定します。

.a.b:
    a_to_b $<

ここで、生成された.bファイルにパッチを適用するとします。私がすることができます:

.a.b:
    a_to_b $<
    patch -p0 < $*.patch

ただし、すべての.bにパッチがない場合、.patchファイルの存在を条件としてパッチステップを作成し、パッチが使用可能な.bにはパッチが適用され、他の.bは残されるようにするにはどうすればよいですか。 a_to_bが完了すると、そのままですか?

4

1 に答える 1

4

パッチが存在する場合はそれを適用するだけの場合は、ルールを次のように変更できます。

.a.b:
        a_to_b $<
        [ ! -f $*.patch ] || patch -p0 < $*.patch

ただし、.aファイルが変更されていない場合でも、パッチファイルが変更された場合は、ルールを実行することもできます。その場合、パターンルールに切り替えて、次の2つを作成する必要があります。1つはパッチの前提条件あり、もう1つはパッチなしです。

%.b : %.a %.patch
        a_to_b $<
        patch -p0 < $*.patch

%.b : %.a
        a_to_b $<
于 2013-02-27T12:34:53.460 に答える