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

281

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

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

Nils
источник
2
Или, чтобы добавить несколько поисковых терминов, Как скрыть полные подробные исполняемые командные строки и показать только краткий цветной вывод в процентах.
ulidtko
Не CMake надмножество: stackoverflow.com/questions/5820303/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
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
richq
источник
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

makerj
источник
8

Если вы используете CMake GUI, то переключитесь на расширенный вид, а затем этот параметр называется CMAKE_VERBOSE_MAKEFILE.

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

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

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

make VERBOSE=1 | grep debug

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

Александр Гриффит
источник