automake 文件中的仅订购先决条件

问题描述

我想知道是否可以在 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 -j 4)下运行 make,我的情况下的先决条件不是,在作业中耦合',而当 cl_generate 目标已被触发时,cl_header 似乎没有“准时”,导致后一个目标中的 sed 命令出错。

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

解决方法

我建议你不要那样做。

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

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

atarget: | target_prereq_1 target_prereq_2