У меня есть система сборки, которая использует CMake для создания файлов Makefile. По умолчанию make не будет повторять команды (например, g++ -std=c++11 ...), но мы можем указать VERBOSE=1 для этого.
Мне нужна выборочная версия, в которой не будут отображаться подробные команды, но в случае ошибки будет напечатана полная команда компиляции / связывания, вызвавшая ошибку.
Есть такая настройка?
VERBOSE=1 не является «настройкой» GNU make. Это настройка, созданная людьми, которые написали ваши make-файлы (я подозреваю, что это CMake, поскольку они ее используют). Так что, если люди, написавшие ваши make-файлы, не предоставили вам средства, которые вы ищете, ответ будет отрицательным ... вам придется спросить их, чтобы убедиться. FWIW, Makefiles, созданные CMake, не имеют такой функции (о которой я знаю).
Спасибо: я не знал об этом, так как я сам не создавал систему сборки, которую использую. Однако я помню, что созданные вручную Makefile будут полностью повторять свои команды (с ошибкой или без ошибки).
Свернутые вручную make-файлы ведут себя так, как их написал автор. Если бы автор написал их так, чтобы они всегда полностью повторяли свои команды, они бы так и сделали. Если нет, то нет. правда, что по умолчанию в простом рецепте без параметров, которые можно указать иначе, make будет повторять команду, которую он собирается запустить, до того, как запустит команду. Но есть способы изменить это поведение как автором make-файла, так и пользователем make-файла.





GNU Make по умолчанию показывает каждую команду полностью (т. Е. Если только
@не имеет префикса для команд рецептов, которые не должны повторяться). ПеременнаяVERBOSEне имеет внутреннего значения дляmake. Он используется другими системами сборки, особенно CMake, которые генерируют make-файлы для GNU Make, которые будут выдавать команды рецептов с отключенным звуком@, если не был определенVERBOSE. Если ваш вопрос действительно касается CMake или другой системы сборки, уточните его.