Тема: Синхронний вивід в консоль при використанні CMake і Ninja

Нещодавно помітив, якщо використовую таку команду для cmake:

-Bbuild/Debug -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++ -G Ninja && cd build/Debug && ninja

то вивід усієї інформації (std::cout) в консоль відбувається лише після завершення компіляції.

А якщо використати ось таку команду:

-Bbuild/Debug -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++ && cd build/Debug && make

то вивід відбувається синхронно з виконання команд програми.

Чому так? Чому make і Ninja по-різному виводять друк у консоль? Як налаштувати Ninja для синхронного виводу?

2

Re: Синхронний вивід в консоль при використанні CMake і Ninja

З ninja ніколи не працював, але

Command output is always buffered. This means commands running in parallel don’t interleave their output, and when a command fails we can print its failure output next to the full command line that produced the failure. // Автопереклад: Вивід команди завжди буферизується. Це означає, що команди, що виконуються паралельно, не чергують свій вивід, і коли команда завершується невдачею, ми можемо вивести її вивід поруч із повним командним рядком, який спричинив помилку.

https://ninja-build.org/manual.html