【发布时间】:2014-10-06 22:54:27
【问题描述】:
当前的 Makefile 是这样的:
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a:
$(MAKE) -C sub_dir all
我想更改此 Makefile,以便无论目标依赖于 lib1.a,它始终运行命令“$(MAKE) -C sub_dir all”。换句话说,在上面的示例中,target1 和 target2 将始终运行“$(MAKE) -C sub_dir all”。有什么办法可以做到吗?
我知道以下方法不起作用:
target1 : lib2.a
$(MAKE) -C sub_dir all
target2 : lib3.a
$(MAKE) -C sub_dir all
target3 : lib3.a
因为如果 lib2.a 没有更新,该命令不会运行。我有一个限制,我只控制 lib1.a,我无法更改 lib2.a 的构建方式。
感谢任何帮助!
更新:我使用了以下解决方案:
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a: relay
.PHONY: relay
relay:
$(MAKE) -C sub_dir all
GNU Make help 说 FORCE 不如 .PHONY 高效,但从您的解释来看,在我看来 FORCE 更好。我理解错了吗?
【问题讨论】:
-
您可以添加
.PHONY: lib1.a,但这会导致所有目标一直重新链接。 -
使目标依赖于某些东西(sub_dir?),而后者又依赖于 lib1.a