Ответ 1
Я уверен, что это сработает:
make VERBOSE=1
Вы также должны иметь возможность добавить это в свой файл CMakeLists.txt, чтобы навсегда установить следующее:
set(CMAKE_VERBOSE_MAKEFILE on)
Это описано в FAQ по CMake.
Я работаю над большим проектом C++, созданным с помощью CMake для Linux. CMake работает нормально, создавая множество файлов Makefile в дереве модулей и приложений. Запуск GNU make
приводит к ошибкам компоновщика. Как я могу заставить make
распечатать точные команды перед их выполнением?
Опция -d не печатает команды, но содержит много полезной информации.
Опция -n печатает все команды, но не запускает их, поэтому я не могу сказать, в чем именно проблема. Изучая стандартный вывод make -n, я не вижу каких-либо значимых команд. Я подозреваю, что некоторые команды меняются в зависимости от результатов предыдущих команд, и иерархия Makefiles затрудняет определение того, что происходит на самом деле.
Я не вижу каких-либо других параметров в справочной странице make, которые кажутся полезными.
Я уверен, что это сработает:
make VERBOSE=1
Вы также должны иметь возможность добавить это в свой файл CMakeLists.txt, чтобы навсегда установить следующее:
set(CMAKE_VERBOSE_MAKEFILE on)
Это описано в FAQ по CMake.
Для автоматически сгенерированных Makefile попробуйте:
make V=1
Опция, которая применяется к 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, по сценарию оболочки, который запускает make и т.д.
Например, вы можете обнаружить, что сгенерированный CMake make файл выполняет /usr/bin/cmake -E __run_co_compile <lots of options ...>
, и все еще удивляетесь, каковы точные вызовы компилятора, которые, в свою очередь, будут выполняться. Вы можете получить это с помощью метода strace.
Для тех, кто использует cmake --build
, который вызывает make
для внутреннего использования, используйте:
$ cmake --build <dir> -- VERBOSE=1
Обратите внимание на --
до VERBOSE=1
! Это передает аргумент базовому процессу make
.
Или:
$ VERBOSE=1 cmake --build <dir>
который также передает VERBOSE=1
в make
, на этот раз через переменную окружения.
Или, если используется cmake
версии 3.14 или выше:
$ cmake --build <dir> --verbose
Обратите внимание на порядок аргументов! Опция --verbose
должна идти после --build
и его аргумента.