lcWhhx Asked: 2024-04-10 18:25:07 +0800 CST2024-04-10 18:25:07 +0800 CST 2024-04-10 18:25:07 +0800 CST 为什么当前目录中不存在先决条件时 Makefile 规则仍然执行? 772 我有一个Makefile说: aaa:bbb echo 456 bbb: echo 123 bbb当目录中 没有文件时,无论是否有aaa文件都会执行这两条规则。 但为什么? make 1 个回答 Voted Best Answer Kusalananda 2024-04-10T19:45:53+08:002024-04-10T19:45:53+08:00 你说过这aaa取决于bbb。这意味着要创建或更新aaa,bbb需要制定目标。 如果aaa和bbb作为文件存在于当前目录中,并且如果aaa比 更新bbb,则不需要重建两个目标,但如果aaa与 相比已过时bbb 或如果bbb缺失,则aaa必须构建以确保它是最新的(如果bbb丢失,这也需要重建bbb)。 下面的示例显示,如果两个目标实际创建了相关文件,则目标不会在第二次调用make. 如果该bbb文件被删除,两个目标都会重建: $ cat Makefile aaa: bbb echo 456 touch aaa bbb: echo 123 touch bbb $ rm -f aaa bbb $ make echo 123 123 touch bbb echo 456 456 touch aaa $ make `aaa' is up to date. $ rm bbb $ make echo 123 123 touch bbb echo 456 456 touch aaa
你说过这
aaa
取决于bbb
。这意味着要创建或更新aaa
,bbb
需要制定目标。如果
aaa
和bbb
作为文件存在于当前目录中,并且如果aaa
比 更新bbb
,则不需要重建两个目标,但如果aaa
与 相比已过时bbb
或如果bbb
缺失,则aaa
必须构建以确保它是最新的(如果bbb
丢失,这也需要重建bbb
)。下面的示例显示,如果两个目标实际创建了相关文件,则目标不会在第二次调用
make
. 如果该bbb
文件被删除,两个目标都会重建: