Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一个makefile中多次强制重建虚假目标?_Makefile_Gnu Make - Fatal编程技术网

如何在同一个makefile中多次强制重建虚假目标?

如何在同一个makefile中多次强制重建虚假目标?,makefile,gnu-make,Makefile,Gnu Make,我有一个需要创建目标组的应用程序,其中给定的目标可能作为依赖项出现在多个组中。如果在同一个调用中构建了包含一个公共目标的多个组,那么我希望每次都重新构建公共先决条件,而不是只为所有组构建一次 例如: # Makefile.test_group_overrides GROUPS=group1 group2 all: $(GROUPS) one: @echo $@ is $(NUM) two: @ec

我有一个需要创建目标组的应用程序,其中给定的目标可能作为依赖项出现在多个组中。如果在同一个调用中构建了包含一个公共目标的多个组,那么我希望每次都重新构建公共先决条件,而不是只为所有组构建一次

例如:

   # 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创建了目标'two',因此不会将'two'重建为group2的依赖项

我曾经尝试过使用.PHONY/force目标组合和-B开关强制重建“2”,但没有成功

有解决办法吗?如果可能的话,我宁愿不创建临时文件来解决

谢谢

如果在同一个调用中构建了包含一个公共目标的多个组,那么我希望每次都重新构建公共先决条件,而不是只为所有组构建一次

我知道,任何
make
实现都无法实现这一点。每个目标最多只构建一次是
make
设计的一个基本特征。虚假目标也不例外


如果事实上,您与一个组关联时构建的目标与与与另一个组关联时构建的目标不同,那么您已经在使用
make
的构建模型。在这种情况下,你应该为每个小组将目标分成单独的目标,因为这就是你所拥有的。如果您需要以两种方式构建目标,那么这表明您确实有不同的目标,您正试图将其建模为一个。

感谢您的及时回复!