Makefile 多次编译细分对象

Makefile 多次编译细分对象,makefile,autotools,automake,Makefile,Autotools,Automake,汽车制造商1.14给我们带来了一些问题。起初,automake在投诉中出错: 警告:源文件“X”位于子目录中,但“子目录对象”选项已禁用 所以我启用了subdir对象,但现在它没有重新编译一些文件。比如说 src/a/foo.c是在SUBDIR a中编译的,但是在src/b中,我想用不同的预处理器标志再次编译它,但是由于../a/foo.o已经存在,make不会重新编译它。这是因为subdir对象将am_b_对象更改为查找../a/foo.o而不是foo.o。是否有一种方法可以绕过最初的投诉,并

汽车制造商1.14给我们带来了一些问题。起初,automake在投诉中出错:

警告:源文件“X”位于子目录中,但“子目录对象”选项已禁用

所以我启用了subdir对象,但现在它没有重新编译一些文件。比如说

src/a/foo.c是在SUBDIR a中编译的,但是在src/b中,我想用不同的预处理器标志再次编译它,但是由于../a/foo.o已经存在,make不会重新编译它。这是因为subdir对象将am_b_对象更改为查找../a/foo.o而不是foo.o。是否有一种方法可以绕过最初的投诉,并指示make使用适当的预处理器标志再次构建文件?这一切都适用于以前版本的automake


我愿意在编译src/b之前执行rm../a/foo.o,但我不知道如何编辑Makefile.am来实现这一点。

如果使用同一树下不同Makefile.am文件的subdir对象,就会发生这种情况。由于automake看不到您使用的是具有不同参数的同一源文件,因此它将假定它已正确重建

正确的解决方案是不使用单独的Makefile.am文件,而是将构建系统重新表述为,因此在这种情况下,它将foo.c构建为foo-a.o和foo-b.o