Makefile 在生成目标和“之前运行安装程序”;最后";之后

Makefile 在生成目标和“之前运行安装程序”;最后";之后,makefile,Makefile,我正在处理一个项目,该项目使用了许多我无法控制的导入Makefiles。我只控制repo根目录下的单个Makefile。另一个makefile中的目标对我正在处理的代码运行测试。但是,我的代码还有一个额外的设置和拆卸要求 我可以将目标作为公共目标的依赖项添加到本地Makefile中。这允许安装程序运行。不过,事后我也需要拆掉。即使make目标失败,拆卸也需要始终进行。示例代码如下: .PHONY: common/test local/setup local/teardown # This in

我正在处理一个项目,该项目使用了许多我无法控制的导入Makefiles。我只控制repo根目录下的单个Makefile。另一个makefile中的目标对我正在处理的代码运行测试。但是,我的代码还有一个额外的设置和拆卸要求

我可以将目标作为公共目标的依赖项添加到本地Makefile中。这允许安装程序运行。不过,事后我也需要拆掉。即使make目标失败,拆卸也需要始终进行。示例代码如下:

.PHONY: common/test local/setup local/teardown

# This includes the setup as needed
common/test: local/setup

local/setup:
        # Alter files to allow destruction of test resources

# But how do I ensure this runs? Depending on the user to run it is error prone...
# Also, this step needs to run EVEN IF the common/test target failed
local/teardown:
        # Revert files so they don't get committed to source control
        # because we need resource destruction disallowed in production

不幸的是,make中没有拆卸设备。您所能做的最好是将其放入同一配方中,但在失败时捕获退出代码,使其仍然运行

例如,假设
common/test
的配方如下:

common/test: local/setup
        run my test
那么您必须使用:

common/test: local/setup
        run my test; ret=$$?; \
        perform teardown operations; \
        exit $$ret

通过“即使目标失败”,您是否包括失败场景,例如某人击中^C或发送信号?或者您只担心
通用/测试
配方是否以正常方式失败(以非0退出代码退出)?好问题,我主要关注通用/测试配方的失败。如果用户中断make,他们可以期望清除部分状态。这将起作用。实际上,我将编写一个“本地/测试”目标,它的配方既设置又拆卸,中间调用公共/测试。捕获返回代码是确保拆卸步骤运行所缺少的部分。