依赖关系如何在gnu Makefile上运行?

时间:2012-10-10 15:46:28

标签: makefile patch

依赖关系如何在gnu Makefile上运行?

我想创建一个Makefile: - 将应用一些补丁(在我们的例子中,在main.c上应用main.patch) - 从patched 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,我怎么能告诉gnu使用main.patch是没用的

感谢您的帮助:))

1 个答案:

答案 0 :(得分: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

P.S。当你在它的时候,你也可以介绍automatic variables; makefile更简洁,更容易维护:

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

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