使用Ninja生成器时,如何让自定义命令与目标立即刷新输出?
Windows下Ninja构建时命令输出延迟的解决办法
在Windows环境使用Ninja构建时,会出现部分命令的输出需等待执行完毕后才会写入控制台的现象:比如运行docker命令能实时输出日志,但运行doxygen时全程无输出,直到命令结束才一次性打印结果。这种差异并非Ninja本身的问题,而是不同命令的输出缓冲机制导致的。
针对这类问题,可通过给目标命令指定**控制台池(console pool)**来解决,具体操作方式分两种场景:
1. 手动编写Ninja构建文件
直接在对应的规则(rule)或构建(build)语句中添加pool = console配置,强制Ninja将命令输出直接关联到当前控制台,避免缓冲:
# 定义doxygen规则时指定控制台池 rule doxygen_build command = doxygen ./Doxyfile pool = console # 关联构建目标与规则 build docs: doxygen_build ./Doxyfile
2. 使用CMake生成Ninja构建文件
若通过CMake管理构建流程,只需给doxygen目标设置USES_TERMINAL属性,CMake会自动在生成的Ninja规则中添加控制台池配置:
# 假设已定义doxygen目标为doxygen_docs set_property(TARGET doxygen_docs PROPERTY USES_TERMINAL TRUE)
之前尝试的NINJA_STATUS环境变量配置、ninja -v -d stats -d keeprsp -j 1等参数,主要用于调整Ninja自身的状态输出或构建调试信息,无法解决命令输出缓冲的问题,因此没有效果。
内容的提问来源于stack exchange,提问作者Bruce Adams
相关产品推荐
相关产品推荐

