将依赖项添加到现有make目标

sta*_*ify 7 makefile

条件0:

说,我有几个源代码,a.c, b.c, ..., z.c我想要一个规则来编译它们.这是一个解决方案:

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)

条件1:

然后,我介绍了一个标题c.h中使用c.c,而另一头e.h在使用c.ce.c,事情变得复杂:

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<

c.o: c.c c.h e.h
    $(CC) -c -o $@ $(CFLAGS) $<

e.o: e.c e.h
    $(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)

我的问题:

根据条件1的溶液,有像add_dependencymake简化溶液,将获得类似下面的一个?

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<

add_dependency(c.o, c.h e.h)
add_dependency(e.o, e.h)
Run Code Online (Sandbox Code Playgroud)

或者,您认为条件1的更好解决方案是什么?

编辑:

感谢亲切的通知@ctheo :)
是的,我确实看过autotools并了解到它将满足我的所有需求.不过我正在处理的是现有的项目和它Makefile包含其他指令处理的代码C++,我想现在我最好只需修改几行,而不是口全Makefileautotools,除非我找不到一个满意的溶液,而不会引入autotools.:)

zti*_*tik 7

起初,我没想到会为此找到解决方案。在我看来,它已被覆盖autotools。但是,经过一番搜索,我发现了GNU / make手册的这一部分

它指出:

一个文件可以成为多个规则的目标。所有规则提到的所有先决条件都被合并到目标的先决条件列表中。

所以有一个查询解决方案

c.o: c.h e.h
e.o: e.h

%.o: %.c
        $(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)

感谢您的坚持。我今天学到了一些东西:)