如何在其他人之后调用make依赖项

时间:2014-04-15 14:40:13

标签: build makefile dependencies

例如:

build: ...
        do some building

clean:
        do some cleaning

build_and_clean: build clean

build_and_clean中,如何确保clean之后build运行?除了作为依赖项之外,还有另一种方法可以调用clean吗?我想避免对make进行递归调用,我也想避免重复clean规则中的代码。

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。您可以使用双冒号规则:

build: ...
        do some building

clean:
        do some cleaning

build_and_clean:: build 
build_and_clean:: clean

documentation states

  

目标的双冒号规则按它们在makefile中出现的顺序执行。但是,双冒号规则真正有意义的情况是那些执行食谱的顺序无关紧要的情况。

一般来说,我同意他们在那里所说的内容,因为在复杂的构建中经常出现这种情况,单个目标的双重冒号规则将从各种来源汇编而来,这些来源的解析顺序可能不保证。但是,在这种情况下,我们知道所有规则的来源。并且make不能自由地重新排序它们。

这也可以在不必重复代码的情况下完成。我使用echo命令来模拟构建命令的执行:

define CLEAN
echo clean
endef

build:
    echo build

clean:
    $(call CLEAN)

build_and_clean: build
    $(call CLEAN)

答案 1 :(得分:0)

我更喜欢你想要避免自己的解决方案之一,但作为替代方案 这是一个相当辛苦的事情:

.PHONY: any build clean build_and_clean

any:
    @if [ ! -z "$(dobuild)" ]; \
    then \
        echo "doing some building"; \
    fi
    @if [ ! -z "$(doclean)" ]; \
    then \
        echo "doing some cleaning"; \
    fi

build: dobuild = 1
build: any

clean: doclean = 1
clean: any

build_and_clean: dobuild = 1
build_and_clean: doclean = 1
build_and_clean: any