Використання CMake з GNU Make: Як я бачу точні команди?


281

Я використовую CMake з GNU Make і хотів би точно побачити всі команди (наприклад, як виконується компілятор, усі прапори тощо).

GNU make має --debug, але це, здається, не є корисним, чи є інші варіанти? Чи надає CMake додаткові прапори в створеному Makefile для налагодження?


2
Або, щоб додати деякі пошукові терміни, як приховати повні, багатослівні виконані командні рядки та показати лише короткий тихий кольоровий відсоток виводу.
улідко


mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
парашувати

Відповіді:


369

Коли ви запустите make, додайте, VERBOSE=1щоб побачити повний вихід команди. Наприклад:

cmake .
make VERBOSE=1

Або ви можете додати -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONдо команди cmake для постійного багатослівного виведення команди з створених Makefiles.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Щоб зменшити деякі, мабуть, менш цікаві результати, ви можете скористатися наступними параметрами. Опція CMAKE_RULE_MESSAGES=OFFвидаляє рядки, такі як [33%] Building C object ... , в той час як --no-print-directoryкаже make зробити, щоб не роздрукувати поточний каталог, фільтруючи рядки, як make[1]: Entering directoryі make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory

12
Ці рішення роблять це занадто багатослівним, друкуючи багато CMake і роблять внутрішні, що не цікаво. Чи є спосіб показати лише команди компіляції та посилання (тобто, що зазвичай актуально для налагодження проблем). Можливо, навіть відображати лише команду, яка не вдалася.
Tronic


7
До речі, якщо ви знаходитесь на платформі, яка його підтримує, cmake -GNinja . ; ninja -vвидно дуже приємний багатослівний вихід з мінімальним пухом.
richq

10
Єдиний рядок ...cmake --build . -- VERBOSE=1
letmaik

Мабуть, я повинен працювати з новою версією cmake, тому що в моєму каталозі збірки після запуску cmake не знайдено ніяких файлів ...
DrumM

80

Зручно встановити параметр у CMakeLists.txtфайлі як:

set(CMAKE_VERBOSE_MAKEFILE ON)

3
Будь ласка, не робіть цього для власних проектів. Не всі ваші користувачі можуть бачити ваш багатослівний збір результатів. Не примушуйте цього застосовувати всіх, хто споживає вашу бібліотеку. CMAKE_VERBOSE_MAKEFILE має бути вимкнено за замовчуванням і за вибором користувача, якщо він потребує цього, для налагодження.
Ela782

3
Так? Ви завжди можете додати його як змінну кешу, якщо у вас є кілька розробників і хочете надати їм вибір. Але так, у версії для випуску проекту ви повинні вимкнути його за замовчуванням.
Джеймс Гіршорн

1
Це чудовий варіант при використанні qt.io QtCreator, оскільки cmake викликається GUI. Дякую!
Грант Ростиг

9

Або просто експортуйте змінну середовища VERBOSE на оболонку так: export VERBOSE=1


8

Якщо ви використовуєте графічний інтерфейс CMake, тоді переключіться на розширений вигляд і тоді параметр називається CMAKE_VERBOSE_MAKEFILE.


Як я можу встановити цю опцію в текстових файлах, не використовуючи GUI?
osgx

4

Я намагався щось подібне, щоб переконатися, що -ggdbпрапор присутній.

Зателефонуйте, зробіть у чистому каталозі та намацуйте прапор, який шукаєте. Шукаю, debugа не ggdbпросто писав би.

make VERBOSE=1 | grep debug

-ggdbПрапор був неясною досить , що тільки команда компіляції вискочила.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.