negative build dependencies
2 days ago
- 像Ninja这样的构建系统只能表达对已有文件的正面依赖,而无法表达负面依赖来检测新文件何时会遮蔽现有依赖。
- 在该示例中,添加src/interface.h会改变编译器包含的头文件,但Ninja不会重新构建,因为它只依赖于dependency/include/interface.h。
- 使用cc -M生成的依赖文件无法解决此问题,因为当新头文件出现时,Ninja不知道何时重新生成依赖文件。
- 这揭示了构建系统的一个根本限制:它们无法追踪对可能改变构建结果的文件缺失或创建的依赖。