【问题标题】:How to trap exit (ctrl+c) signal in Makefile?如何在 Makefile 中捕获退出 (ctrl+c) 信号?
【发布时间】:2019-10-29 19:42:21
【问题描述】:

我正在尝试 trap 退出 (ctrl+c) 信号以执行一些清理活动。

在 shell 脚本中,我遵循以下函数进行陷阱,

#To trap ctrl-c signals
trap ctrl_c INT

#To trap exit signals
trap on_exit EXIT

function ctrl_c() {
    echo "exited by user"
    exit
}

function on_exit() {
    echo "exited by user"
    exit
}

如何在 Makefile 中实现相同的功能?

【问题讨论】:

标签: linux makefile build signals gnu-make


【解决方案1】:

你不能在 make 中捕获信号。尝试使用.INTERMEDIATE 进行清理并阅读5.6 Interrupting or Killing make

all: test.out

test.out: test.tmp
    sleep 10

test.tmp:
    echo x>test.tmp

.PHONY: all

.INTERMEDIATE: test.tmp

如果这些文件是图形的一部分并且在启动之前不存在,Make 会捕获中断信号并删除它们:

$ make
echo x>test.tmp
sleep 10
make: *** [Makefile:4: test.out] Interrupt
make: *** Deleting intermediate file 'test.tmp'

如果你真的需要在 make 退出时执行某个程序,请在某个变量的初始化中生成一个后台进程,并让它等待主 make 进程终止:

DUMMY := $(info launching the moniror process...)$(shell some-command& )

【讨论】:

    【解决方案2】:

    可以显式调用 bash 解释器并在那里定义陷阱:

    test.out:
        bash -c "trap 'rm test.tmp' EXIT; \
                 echo x>test.tmp; \
                 cp test.tmp test.out"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2016-05-29
      相关资源
      最近更新 更多