Создание команд печати CMake перед выполнением


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

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

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

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

3 52

3 ответа:

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

make VERBOSE=1

вы также должны быть в состоянии добавить это в свои CMakeLists.txt, чтобы окончательно установить, что.

set(CMAKE_VERBOSE_MAKEFILE on)

это описано в CMake FAQ.

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

make V=1

опция, которая применяется к 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.