如何制作适应性:用破碎的目标开始编译?

时间:2018-04-04 07:34:08

标签: makefile cmake gnu-make

Z.cpp的编译失败。我修改了文件Z中的类Z.h的私有成员。我重新运行make。然后Make编译所有依赖于Z.hA.cppB.cpp,......的文件,没有人会如此愚蠢和迂腐,......,{{1 }},X.cpp,在它最终到达Y.cpp之前,由于我编辑Z.cpp中的一个微不足道的错误而再次失败...

有没有办法让Z.h适应?让它开始编译最近没编译的目标?

[PS]让我澄清一下:我当然知道Make的任何修改都可能会破坏Z.h,...,A.cpp中的任何一项。当然,这些来源也需要重新编译。这个问题是关于编译顺序启发式改进。

我不希望Y.cpp学习任何有关C ++的知识。这对我来说是完全足够的,并且对许多人来说非常有帮助,如果Make可以被教导推理如下:在我最后一次尝试编译Make,..,A,一切除Z以外通过。即使我的用户努力修复ZZ仍然比任何其他单个源文件更容易被破坏。因此,我现在将按照ZZ,...,A的顺序编译来源。因此,平均而言,我的用户将不得不等待我以错误终止。

1 个答案:

答案 0 :(得分:0)

Make并不真正理解C ++,甚至是C语言。它以抽象的术语将文件依赖性理解为有向图。 A.o取决于Z.hZ.o也取决于make

此外,您更改了私人成员(即使A.o会神奇地知道)并不意味着private不受影响。内联了很多C ++代码,私有成员可以通过内联代码访问。 class Z检查访问是否来自同一个Z.o,而不是同一个文件make -j 8

通常,更好的解决方法是public interface OnItemClickListener { void onItemClick(); } while initializing your adapter class with listener implementation public Adapter(OnItemClickListenerener listener){ this.listener = listener; } inside your view-holder: viewHolder.itemView..setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.onItemClick();} } 。为什么一次只构建一个文件?