说,我有几个源代码,a.c, b.c, ..., z.c我想要一个规则来编译它们.这是一个解决方案:
%.o: %.c
$(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)
然后,我介绍了一个标题c.h中使用c.c,而另一头e.h在使用c.c和e.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_dependency在make简化溶液,将获得类似下面的一个?
%.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++,我想现在我最好只需修改几行,而不是口全Makefile来autotools,除非我找不到一个满意的溶液,而不会引入autotools.:)
起初,我没想到会为此找到解决方案。在我看来,它已被覆盖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)
感谢您的坚持。我今天学到了一些东西:)