在Makefile中有条件执行

问题描述 投票:0回答:1

我想检查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上运行编译来完成。有没有更好的方法来完成此操作而又不会在退出时产生错误?谢谢

makefile conditional-statements exit
1个回答
0
投票

运行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将停止。

如果源文件确实存在,则all的先决条件将是COMPILE并将被构建。

© www.soinside.com 2019 - 2024. All rights reserved.