CMake add_custom_target:忍者在命令完成之前抑制输出,因此无法进行用户交互

Posted

技术标签:

【中文标题】CMake add_custom_target:忍者在命令完成之前抑制输出,因此无法进行用户交互【英文标题】:CMake add_custom_target: Ninja suppressing output until command completed and therefore user interaction not possible 【发布时间】:2013-11-05 10:55:51 【问题描述】:

如果我添加

add_custom_target(dummy COMMAND dir && sleep 2)

然后

ninja dummy

目录内容只有在休眠终止后才可视化。我知道这种机制有一个有价值的特性,即允许 Ninja 即使在并行执行多个作业时也能显示非常整洁/连续的输出。

但是,在以下实际案例中,这是一个问题:我真正的add_custom_target 会执行一个程序,该程序在某些时候会提示用户输入密码,但 Ninja 基本上会阻止任何交互。

有解决办法吗?

注意:使用 -v 选项(详细)没有帮助,还有 -j 1(一次只能完成一项工作)。

另一个例子:

add_custom_target(dummy COMMAND cmd /c time)

还有:

D:\build> ninja dummy
[1/1] cmd.exe /c cd D:\build && cmd /c time
FAILED: cmd.exe /c cd D:\build && cmd /c time
The current time is: 13:06:08.57
Enter the new time: ninja: build stopped: subcommand failed.

一些提示:ninja-build > Launching interactive apps from build rules

【问题讨论】:

【参考方案1】:

我收到了来自 Ninja 邮件列表的反馈。

关于这个主题有一个问题,还有一个补丁(虽然我不确定不缓存它是否也允许交互;鉴于time 的测试结果,可能不是):

Issue。 Patch.

【讨论】:

【参考方案2】:

这是忍者设计的一部分。

相关问题:0014544: Remove edit_cache target from ninja output

【讨论】:

嗨!你能更详细地解释一下这个问题是如何相关的吗?

以上是关于CMake add_custom_target:忍者在命令完成之前抑制输出,因此无法进行用户交互的主要内容,如果未能解决你的问题,请参考以下文章

cmake add_custom_target 转义

CMake add_custom_target:忍者在命令完成之前抑制输出,因此无法进行用户交互

cmake 的正确打开方式

使用 cmake 构建外部库

在CMake中生成命令后执行命令

CMake 的默认构建目标的名称是啥?