问题描述
我想知道是否可以在 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