0

解决 了我需要在 MakeFile 中生成后台进程并考虑它们的退出代码。设想:

  • 在后台产生了几个进程。
  • MakeFile 继续评估(并且不想在某个循环中检查生成的进程 PID 等等)
  • 某些进程以非零退出代码退出
  • 使实用程序以非零退出代码退出

自然地,我考虑使用command &在后台生成一个进程。

问题:如果指定了命令,command &则 make 进程不会跟踪它的退出代码。

样品 1

do:
        @false & \
        echo "all is normal"


%make -f exit_status_test.mk
all is normal

样品 2

do:
        @false && \
        echo "all is normal"


%make -f exit_status_test.mk
*** Error code 1

Stop in /usr/home/scher/tmp/lock_testing.

示例 1 显示 make 实用程序不考虑后台进程的退出代码。

PS 请不要建议存储生成的进程 PID 并在循环中检查它们,并有一些sleep延迟等等。需要继续评估 MakeFile 并以非零代码自动退出。

解决方案

do:
        @(echo "background command" ; (echo "[HANDLER] Prev command exits with $$?")) & \
        echo "doing something"

所以我们可以创建一系列命令来处理后台进程的退出状态。

4

1 回答 1

0

这似乎是一个错误的尝试来创建一个Makefile可以并行运行多个作业的,而实际上 make 通常可以为你做这件事。

您需要做的就是在 make 中给每个作业一个单独的命令:

target: job1 job2

job1:
    some_command

job2:
    some_other_command

如果你在你的Makefilethen run中使用类似的东西make -j2 target,那么两者some_commandsome_other_command都将并行运行。

看看你是否能找到一种方法让 make 像这样并行运行你的工作。

于 2012-05-16T21:46:00.503 回答