Создание команд печати CMake перед выполнением
Я работаю над большим проектом C++, построенным с CMake на Linux. CMake работает нормально, создавая Орду Makefiles в дереве модулей и приложений. Запуск GNU make
приводит к ошибкам линкера. Как я могу получить make
чтобы распечатать точные команды перед их запуском?
параметр-d не печатает команды, но много информации, которая не была полезной.
опция-n печатает все команды, но не запускает их, поэтому я не могу сказать, были ли именно в этом и беда. Изучая stdout от make-n, я не вижу никаких команд, которые имеют отношение. Я подозреваю, что некоторые команды меняются в зависимости от результатов предыдущих команд, а иерархия Makefiles затрудняет определение того, что происходит на самом деле.
Я не вижу никаких других вариантов в маке человек страница, которая кажется полезной.
3 ответа:
довольно уверен, что это сработает:
make VERBOSE=1
вы также должны быть в состоянии добавить это в свои CMakeLists.txt, чтобы окончательно установить, что.
set(CMAKE_VERBOSE_MAKEFILE on)
это описано в CMake FAQ.
опция, которая применяется к GNU make и работает с любым Makefile, независимо от того, генерируется ли CMake или нет, заключается в использовании сделать. Это позволит распечатать команды
make
выполняет и все еще выполняет их.это относится ко всем командам, а не только те, которые
VERBOSE=1
илиV=1
запускает печать в CMake/automake сгенерированных makefiles.и еще одна альтернатива на Linux-запустить make под strace, а
strace -f -e trace=execve make <make options>
. Этот выход из strace будет включать каждый процесс, который выполняется, с помощью make, с помощью сценария оболочки, который делает ran и т. д.например, вы можете обнаружить, что созданный CMake makefile выполняет
/usr/bin/cmake -E __run_co_compile <lots of options ...>
и все еще интересно, что такое точный вызов компилятора, что это, в свою очередь, будет выполняться. Вы можете получить это с помощью метода strace.