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



例如:

build: ...
        do some building
clean:
        do some cleaning
build_and_clean: build clean

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

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

build: ...
        do some building
clean:
        do some cleaning
build_and_clean:: build 
build_and_clean:: clean

文件说明

目标的双冒号规则按照它们在生成文件中出现的顺序执行。然而,双冒号规则真正有意义的情况是那些执行配方的顺序无关紧要的情况。

总的来说,我同意他们的说法,因为在复杂的构建中,单个目标的双冒号规则通常是从各种来源组装而成的,而这些来源的解析顺序可能无法保证。然而,就目前的情况而言,我们知道所有规则的来源。make无权重新订购。

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

define CLEAN
echo clean
endef
build:
    echo build
clean:
    $(call CLEAN)
build_and_clean: build
    $(call CLEAN)

我更喜欢您自己想要避免的解决方案之一,但作为替代方案有一种相当吃力的东西:

.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

最新更新