makefile - 如何在同一个 makefile 中多次强制重建 PHONY 目标?
问题描述
我有一个应用程序,我需要在其中创建目标组,其中给定的目标可能作为依赖项出现在多个组中。如果在同一个调用中构建了多个包含共同目标的组,我希望每次都重新构建共同的先决条件,而不是只为所有组重新构建一次。
例如:
# Makefile.test_group_overrides
GROUPS=group1 group2
all: $(GROUPS)
one:
@echo $@ is $(NUM)
two:
@echo $@ is $(NUM)
three:
@echo $@ is $(NUM)
group1: NUM=2
group1: one two
group2: NUM=3
group2: two three
如果我执行:
$ make -f Makefile.test_group_overrides group1
one is 2
two is 2
$ make -f Makefile.test_group_overrides group2
two is 3
three is 3
这是我对独立执行的每个组目标的期望。
但是,如果我尝试在同一个调用中构建两个组,如下所示:
$ make -f Makefile.test_group_overrides all
one is 2
two is 2
three is 3
看起来 Make 注册它已经为 group1 设置了目标“二”,因此不会将“二”重建为 group2 的依赖项。
我尝试过使用 .PHONY/FORCE 目标组合和 -B 开关强制重建“两个”的变体,但没有任何运气。
有解决办法吗?如果可能的话,我宁愿不创建临时文件来解决。
谢谢!!
解决方案
如果在同一个调用中构建了多个包含共同目标的组,我希望每次都重新构建共同的先决条件,而不是只为所有组重新构建一次。
make
我知道的任何实现都无法做到这一点。make
每个目标最多构建一次是我们设计的一个基本特征。虚假目标也不例外。
如果实际上您的目标在与一个组关联时构建的目标与在与不同组关联时构建的目标不同,那么您已经在紧张make
构建模型。在这种情况下,您应该为每个组将目标拆分为单独的目标,因为无论如何这就是您所拥有的。如果您需要以两种方式构建目标,则可以确认您确实确实有不同的目标,您正在尝试将它们建模为一个目标。
推荐阅读
- python-3.x - 为什么这个字符串没有保存在全局变量中?
- c - 为什么要打印以前的输出?
- c++ - CMakiLists.txt 上的 CGAL::CGAL
- javascript - 我可以打开多个 Puppeteer 浏览器吗?
- c - ARMv7 汇编语言:如何反转 char 数组并将其输出到另一个 char 数组
- excel - 如何在excel中匹配买/卖订单?
- mysql - 我的查询显示 heidisql 错误,不知道如何修复
- javascript - 使用带有大写字母的保留字会在 Node 中带来不良后果吗?
- javascript - 使用逻辑的 Typescript 工厂类
- c++ - 使用迭代器指针从对象指针列表中删除元素(C++)