我想知道是否可以在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_header
目标已经触发时,我的情况下的先决条件不是"在作业中耦合,而cl_generate
似乎不准时",从而导致后一个目标中的sed
命令出错。
即使有人证明这个概念是完全错误的,并为我启发这些东西,我也会很感激。非常感谢。
我建议您不要这样做。
您可以在automake文件中编写任何标准的makefile文本:它们只是makefile,之后还会为您添加一堆样板文件。
因此,您可以将其作为一个标准的make规则来定义仅限订单的目标,而无需将其添加到额外的先决条件变量中:
atarget: | target_prereq_1 target_prereq_2