-1

依存関係はgnuMakefileでどのように機能しますか?

次のようなMakefileを作成したいと思います。-いくつかのパッチを適用します(この例では、main.cにmain.patchを適用します)-パッチを適用したmain.cファイルからtotoというプログラムを作成します

my_patch=./main.patch
all: toto

patch: $(my_patch)
    echo "apply patch"

main.o: main.c
    gcc -o main.o -c main.c -Wall

toto: patch main.o $(my_patch)
    echo "build"
    gcc -o toto main.o

しかし、パッチは常に適用されます...これは私の質問につながります:「依存関係はgnu Makefileでどのように機能しますか?」

main.patchの日付がバイナリtotoよりも小さい場合、main.patchを適用しても意味がないことをgnuに伝えるにはどうすればよいですか。

助けてくれてありがとう:)

4

1 に答える 1

1

偽のターゲット(patch)は混乱を招きます。patchルールは変更main.cされるので、それをターゲットにします。

my_patch=./main.patch
all: toto

main.c: $(my_patch)
    echo "apply patch"

main.o: main.c
    gcc -o main.o -c main.c -Wall

toto: main.o # no need to specify $(my_patch) here
    echo "build"
    gcc -o toto main.o

PSを使用しているときに、自動変数を導入することもできます。makefileはよりクリーンで、そのように保守するのが簡単です。

main.o: main.c
    gcc -o $@ -c $< -Wall

toto: main.o # no need to specify $(my_patch) here
    echo "build"
    gcc -o $@ $^
于 2012-10-10T16:47:45.840 に答える