在生成文件中有条件执行



我想检查 Makefile 中是否存在文件,如果不存在,则运行配方,并在创建后停止,否则继续使用存在的文件并执行更多配方。我认为这最好用我的 Makefile 中的一个例子来说明:

GEN_C_FILES: GEN_C_FLS
$(shell  cat $(DESIGN_TOP).c.tmp c_template.c.tmp > $(DESIGN_TOP).c ) 

$(DESIGN_TOP).c: 
$(MAKE) GEN_C_FILES
@(echo $(DESIGN_TOP).c created and modify it to suit the design before running COMPILE)
exit 1
COMPILE: $(DESIGN_TOP).c
@(echo bsub -I compile_script-batch $(DESIGN_TOP).c -log $(DESIGN_TOP).log)
@(bsub -I compile_script -batch $(DESIGN_TOP).c -log $(DESIGN_TOP).log)

我可以完成我想要的,但退出会产生错误消息。如果执行 $(DESIGN_TOP(.c 的配方,我希望它退出,但如果配方未执行,则文件存在,因此不需要生成它,并且 COMPILE 目标的其余部分应该通过在 bsub 上运行编译来完成。有没有更好的方法可以在退出时生成错误的情况下完成此操作?谢谢

运行make COMPILE时无法使其按心需要的方式工作。 让 make 在构建过程中停止并且不再继续的唯一方法是失败。 但是,相反,您可以更改make首先想要构建的内容,如下所示:

GOAL = $(if $(wildcard $(DESIGN_TOP).c),COMPILE,$(DESIGN_TOP).c)
all: $(GOAL)
$(DESIGN_TOP).c:
cat $(DESIGN_TOP).c.tmp c_template.c.tmp > $@
@echo $@ created and modify it to suit the design
COMPILE: $(DESIGN_TOP).c
bsub -I compile_script -batch $< -log $(DESIGN_TOP).log

现在,如果您运行makemake all并且源文件不存在,则all的先决条件将是源文件,而不是其他任何内容,因此将构建它,然后 make 将停止。

如果源文件确实存在,则将COMPILEall的先决条件,并将其生成。

最新更新