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

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

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

8 ответов

Решение

When you run make, add VERBOSE=1 to see the full command output. Например:

cmake .
make VERBOSE=1

Или вы можете добавить -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON to the cmake command for permanent verbose command output from the generated Makefiles.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

To reduce some possibly less-interesting output you might like to use the following options. Опция CMAKE_RULE_MESSAGES=OFF removes lines like [ 33%] Building C object..., while --no-print-directory tells make to not print out the current directory filtering out lines like make[1]: Entering directory а также make[1]: Leaving directory,

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

Удобно установить опцию в CMakeLists.txt файл как:

set(CMAKE_VERBOSE_MAKEFILE ON)

Или просто экспортируйте переменную среды VERBOSE в оболочку следующим образом: export VERBOSE=1

cmake --build . --verbose

В Linux и с генерацией Makefile это, вероятно, просто вызов make VERBOSE=1 под капотом, но cmake --build может быть более переносимым для вашей системы сборки, например, для работы в разных операционных системах или, если вы решите сделать, например, для сборки Ninja позже:

mkdir build
cd build
cmake ..
cmake --build . --verbose

Его документация также предполагает, что он эквивалентен VERBOSE=1:

--verbose, -v

Включите подробный вывод, если он поддерживается, включая выполняемые команды сборки.

Этот параметр можно не указывать, если установлена переменная среды VERBOSE или кэшированная переменная CMAKE_VERBOSE_MAKEFILE.

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

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

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

make VERBOSE=1 | grep debug

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

CMake 3.14+

CMake теперь имеет--verboseчтобы указать подробный вывод сборки. Это работает независимо от вашего генератора.

      cd project
cmake -B build/
cmake --build build --verbose

Однако стоит отметить, что Xcode может не работать с параметром --verbose.

      Some generators such as Xcode don't support this option currently.

Другой вариант — использоватьVERBOSEпеременная окружения.

      New in version 3.14.

Activates verbose output from CMake and your build tools of choice when you start to actually build your project.

Note that any given value is ignored. It's just checked for existence.

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUEсгенерирует файл со всеми командами компиляции .

Этот файл требуется некоторым LSP, чтобы знать, как скомпилировать исходный файл из коробки, но он также может помочь при отладке проблем компиляции.

Выходной файл называется ${CMAKE_BINARY_DIR}/compile_commands.json.

Другие вопросы по тегам