【问题标题】:Order-only prerequisite inside automake fileautomake 文件中的仅订购先决条件
【发布时间】:2021-07-10 13:39:22
【问题描述】:

我想知道是否可以在 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_header 目标已被触发时,cl_generate 似乎没有“准时”,导致后一个目标中的sed 命令出现错误。

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

【问题讨论】:

    标签: makefile autoconf automake


    【解决方案1】:

    我建议你不要那样做。

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

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

    atarget: | target_prereq_1 target_prereq_2
    

    【讨论】:

    • 感谢疯狂科学家!我不想让它那么复杂。我试图遵循我正在添加的项目的理念。它的一部分是基于这样的 Makefile 构建的可执行文件,其中目标(名称)由变量定义。所以我想我只是在先决条件中添加另一个。似乎还很尴尬。再次感谢,我会重新考虑并简化它。
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多