Использование CMake с GNU Make: Как я могу увидеть точные команды?


281

Я использую CMake с GNU Make и хотел бы видеть все команды точно (например, как выполняется компилятор, все флаги и т. Д.).

GNU make имеет --debug, но, похоже, это не очень полезно, есть ли другие варианты? Предоставляет ли CMake дополнительные флаги в сгенерированном Makefile для отладки?


2
Или, чтобы добавить несколько поисковых терминов, Как скрыть полные подробные исполняемые командные строки и показать только краткий цветной вывод в процентах.
ulidtko


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

Ответы:


369

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

cmake .
make VERBOSE=1

Или вы можете добавить -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONв команду cmake постоянный подробный вывод команды из сгенерированных Make-файлов.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

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

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

12
Эти решения делают его слишком многословным, печатают много CMake и делают внутренности неинтересными. Есть ли способ показать только команды компиляции и компоновки (то есть то, что обычно имеет отношение к проблемам отладки). Возможно, даже отображать только команды, которые не удалось.
Tronic

Топ гугла Google рекомендует: «Если вы хотите видеть только командные строки g ++, вы должны использовать grep & Co. - если это возможно - в связи с подробными Makefiles» . Возможно, у разработчиков с большим опытом работы с cmake есть другие советы.
Тревор Бойд Смит

7
Кстати, если вы работаете на платформе, которая поддерживает ее, вы получите cmake -GNinja . ; ninja -vочень хороший многословный вывод с минимальным пухом.
Ричк

11
Одиночная линия ...cmake --build . -- VERBOSE=1
letmaik

По-видимому, я должен работать с более новой версией cmake, потому что в моем каталоге сборки не найдены make-файлы после запуска 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 GUI, то переключитесь на расширенный вид, а затем этот параметр называется CMAKE_VERBOSE_MAKEFILE.


Как я могу установить эту опцию в текстовых файлах, без использования графического интерфейса?
osgx

4

Я пытался сделать что-то подобное, чтобы убедиться, что -ggdbфлаг присутствует.

Вызовите make в чистую директорию и установите флаг, который вы ищете. Ищу, debugа не ggdbпросто написать.

make VERBOSE=1 | grep debug

-ggdbФлаг был неясной достаточно , что только команда компиляции выскочила.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.