GNU Make 构建与重建的高级技巧
在使用 GNU Make 进行项目构建时,我们常常会遇到一些复杂的情况,比如一个命令需要更新多个文件,或者项目规模变大后构建效率的问题。本文将详细介绍如何处理这些情况,包括避免常见错误、使用模式规则、哨兵文件,以及实现非递归构建等技巧。
避免错误的构建规则
想象有一个命令可以从相同的先决条件一步生成两个文件(例如a和b),以下代码展示了错误的做法:
.PHONY: all all: a b a b: c d touch a b乍一看,这段代码似乎正确地表示了a和b由c和d通过一个命令构建。但实际上,如果运行make,特别是使用-j选项进行并行构建时,命令会被执行两次:
$ make touch a b touch a b这是因为 GNU Make 实际上将此 Makefile 解释为:
.PHONY: all all: a b a: c d touch a b b: c d touch a b这里有两个单独