Создание команд печати CMake перед выполнением - PullRequest
58 голосов
/ 26 января 2011

Я работаю над большим проектом C ++, созданным с помощью CMake в Linux. CMake работает нормально, создавая множество файлов Makefile в дереве модулей и приложений. Запуск GNU make приводит к ошибкам компоновщика. Как мне заставить make распечатать точные команды перед их выполнением?

Опция -d не печатает команды, но содержит много полезной информации.

Опция -n печатает все команды, но не запускает их, поэтому я не могу сказать, в чем именно проблема. Изучая стандартный вывод команды make -n, я не вижу никаких соответствующих команд. Я подозреваю, что некоторые команды меняются в зависимости от результатов предыдущих команд, и иерархия Makefiles затрудняет определение того, что на самом деле происходит.

Я не вижу других вариантов на странице make man , которые кажутся полезными.

Ответы [ 3 ]

72 голосов
/ 26 января 2011

Я вполне уверен, что это будет работать:

make VERBOSE=1

Вы также должны иметь возможность добавить это в ваш файл CMakeLists.txt для постоянной установки:

set(CMAKE_VERBOSE_MAKEFILE on)

Это покрытов CMake FAQ .

7 голосов
/ 07 июня 2012

Для автоматически сгенерированных Makefile попробуйте:

make V=1
2 голосов
/ 22 августа 2018

Опция, которая применяется к GNU make и работает с любым Makefile, сгенерированным CMake или нет, заключается в использовании опции --trace для make.Это распечатает команды, которые make выполняет, и продолжает их выполнять.

Это относится ко всем командам, а не только к тем, которые VERBOSE=1 или V=1 запускают печать в сгенерированных CMake / automake make-файлах.

И еще одна альтернатива в Linux - запустить make под strace , как strace -f -e trace=execve make <make options>.Вывод из strace будет включать каждый процесс, который выполняется: по make, по сценарию оболочки, который запускает run и т. Д.

Например, вы можете обнаружить, что генерируемый CMake make-файл выполняется/usr/bin/cmake -E __run_co_compile <lots of options ...> и все еще удивляетесь, каковы точные вызовы компилятора, которые, в свою очередь, будут выполняться.Вы можете получить это методом strace.

...