Makefile 可以在GNU Make中序列化某些目标吗

Makefile 可以在GNU Make中序列化某些目标吗,makefile,gnu-make,Makefile,Gnu Make,在GNU make中,是否可以序列化某些目标,同时并行化其他目标。我没有问题,所以很遗憾没有代码可以共享。但我可以举一个例子: 假设我有很多需要编译的.c源文件,只有少数需要编译的汇编源文件。因此,我需要通过添加-j8选项来加快编译过程,但是出于某种原因,无论是否使用-j8选项,我都需要汇编过程是串行的。我试图找到一种方法,使.NOTPARALLEL只在特定目标上工作,但我没有成功,所有的问题、帖子和文章都在谈论如何为目标排序,这不是我想要的。那么,是否有可能采用以下形式之一?如果可能,正确的方

在GNU make中,是否可以序列化某些目标,同时并行化其他目标。我没有问题,所以很遗憾没有代码可以共享。但我可以举一个例子:

假设我有很多需要编译的.c源文件,只有少数需要编译的汇编源文件。因此,我需要通过添加
-j8
选项来加快编译过程,但是出于某种原因,无论是否使用
-j8
选项,我都需要汇编过程是串行的。我试图找到一种方法,使
.NOTPARALLEL
只在特定目标上工作,但我没有成功,所有的问题、帖子和文章都在谈论如何为目标排序,这不是我想要的。那么,是否有可能采用以下形式之一?如果可能,正确的方法是什么

c_sources := a.c b.c c.c
c_objs := a.o b.o c.o
#This process needs to be parallelized.
$(c_sources) : $(c_objs)
   @echo 'Command used to compile .c files.'

assembly_sources := d.s e.s f.s
assembly_objs := d.o e.o f.o

#This process needs to be serialized.
$(assembly_sources) : $(assembly_objs)
   @echo 'Command used to assemble assembly files (.s files).'


在GNU make中,除了在两个特定目标之间创建依赖关系之外,没有其他方法可以声明它们之间的序列化。如果目标A将目标B列为先决条件,那么B将在A之前完全构建

调查订单依赖关系可能很有用

或者可以使用注释中提到的递归

这些是你唯一的选择。make的其他一些版本提供了特殊的目标,这些目标可以散布在强制“序列化点”的先决条件列表中,但gnumake不提供这种功能


由于您没有为我们提供一个具体的问题示例,我们无法为您提供更具体的解决方案。

您可以将其拆分为两个生成文件,一个用于程序集,一个用于C,并在其中使用
。notparallell
#This process needs to be parallelized.
%.c : %.o
   @echo 'Command used to compile .c files.'

#This process needs to be serialized.
%.s : %.o
   @echo 'Command used to assemble assembly files (.s files).'