使用Windows 7,Eclipse CDT,MinGW和MSYS2不能取消C ++ Makefile构build

我正在维护在Windows上运行的C ++构build系统,并由命名组件组成。 当我们从Windows XP升级到Windows 7时,我们注意到构build可能会被取消,Eclipse Cancelbutton只是灰色,但构build总是运行到最后。 我们进一步发现,通过使用MSYS而不是MSYS2,构build也可以在Windows 7中取消,但多核构build(例如make -j4)从一开始就挂起(与MSYS2一起工作)。 我们需要多核,所以这不是解决scheme。

我们做了一些研究,得出MSYS2使用WinAPI进程创build标志CREATE_NEW_PROCESS_GROUP启动make进程的结论。 我们假设这个标志在Windows XP中没有被执行,从而解释了为什么caneling在那里工作。

我们知道CREATE_NEW_PROCESS_GROUP会导致另一个WinAPI调用SetConsoleCtrlHandler(NULL,TRUE),这又会导致Ctrl-C被禁用,只能通过Ctrl-Break终止进程。 我们可以通过从命令行testing我们的构build来validation这种行为。

这个问题的预期解决scheme是什么? 按“取消”后,是否可以让Eclipse发送Ctrl-Break而不是Ctrl-C? 或者是我们的MSYS2configuration错误,它不应该压制Ctrl-C的构build过程? 或者是我们的分析垃圾和问题是完全不同的东西?

Solutions Collecting From Web of "使用Windows 7,Eclipse CDT,MinGW和MSYS2不能取消C ++ Makefile构build"