automake 文件中的 Order-only 先决条件

Order-only prerequisite inside automake file

我想知道是否可以在 Makefile.am

中添加仅订单先决条件
pkglibexec_PROGRAMS = atarget
EXTRA_atarget_PREREQUISITE = | target_prereq_1 target_prereq_2         # <=pseudo code

以便生成的 Makefile 将应用这些先决条件。

作为解决方法,我目前使用从 Makefile 复制到 Makefile.am 中的目标生成代码 它看起来是这样的:

pkglibexec_PROGRAMS = atarget
...
atarget_gen_program: some_source.cl
    cat $^ > $@

cl_generate: atarget_gen_program
    xxd -i $< > cl_gen_header.h
    @rm -f $<

cl_header:
    sed -i "1 s|^|/*awesome commentary*/|" cl_gen_header.h

...
$(pkglibexec_PROGRAMS)$(EXEEXT): | cl_generate cl_header $(atarget_OBJECTS) $(atarget_DEPENDENCIES) $(EXTRA_atarget_DEPENDENCIES) 
    @rm -f atarget$(EXEEXT)
    $(AM_V_CCLD)$(LINK) $(atarget_OBJECTS) $(atarget_LDADD) $(LIBS)

这似乎有效,但可能没有相关问题,因此如果我 运行 make 在多作业模式下(即 make -j 4 ) 在我的案例中,先决条件不是“耦合”在工作中,并且 cl_generate 似乎不是“准时”,当 cl_header 目标已经被触发时,导致 sed 内出现错误命令在后一个目标中。

即使有人证明这个概念是完全错误的并为我提供启发,我也会很感激。非常感谢。

我建议你不要那样做。

您可以在 automake 文件中编写任何标准的 makefile 文本:它们只是 makefile,之后会为您添加一堆样板文件。

因此,您可以将其编写为标准 make 规则来定义您不需要将它们添加到额外先决条件变量中的仅订单目标:

atarget: | target_prereq_1 target_prereq_2