2015-06-29 2 views
4

Есть ли опция вывода «предварительно обработанного» make-файла, что эквивалентно опции -E GCC?GNU Makefile "препроцессор"?

У меня есть проект, состоящий из иерархии десятков модулей, каждый со своим make-файлом. Сборка вызывается из мастер-файла make. Этот мастер-файл содержит включенные, переменные определения, зависимые от командной строки переменные и т. Д.

Итак, я ищу обработанный файл makefile, включая все подстановки.

+0

Не является ли 'make -n' полезным в этом контексте? –

+0

@EugeniuRosca - похоже, этот вариант не создает результат, который я ищу. – ysap

ответ

3

Не то, чтобы я знал. Самое близкое, что вы можете получить к этому, - это результат от make -qp (или аналогичного), который будет выгружать базу данных make у вас.

Часть проблемы с этим запросом заключается в том, что многие из подстановок/и т. Д. происходят по мере того, как цели обрабатываются, и список целей не обязательно известен без фактической попытки сборки (по крайней мере, до некоторой степени), поэтому необязательно полностью расширять/etc. makefile на месте.

Выход make -d также полезен для конкретной случайной информации, связанной с тем, как make обработал make-файлы, но не содержит содержимое makefile напрямую.

Remake также может предоставить дополнительную полезную информацию.

Если вы ищете вычисленную стоимость некоторых собранных/и т. Д. глобальная переменная make, то this Запись в блоге Эрика Мельски, вероятно, будет очень полезна.

tl; dr Он добавляет цель, подобную этой, в Makefile (хотя в блоге больше волшебства, поэтому я предлагаю прочитать его).

print-%: 
    @echo '$*=$($*)' 
    @echo ' origin = $(origin $*)' 
    @echo ' flavor = $(flavor $*)' 
    @echo ' value = $(value $*)' 

Хотя в личном пользовании я заменил эту первую строчку с чем-то больше, как это

@echo '$*=$(subst ','\'',$($*))' 

держать цитирование результат правильной.

+0

Спасибо. Было много информации (более 3000 строк вывода), и для этого требуется некоторое перекопание, но я предполагаю, что с достаточным временем, затраченным на это, можно найти необходимую информацию. – ysap

+0

@ysap Что конкретно вы пытаетесь выяснить? Могут быть более простые способы сделать это. (На самом деле, я добавлю один часто полезный метод, который я только что вспомнил для ответа.) –

+0

В принципе, для обратного проектирования проекта, чтобы создать проект на основе IDE (Eclipse). Существует много модулей, создающих несколько библиотек, и многие из них не компилируются/не связаны в окончательный двоичный файл. В одном из распространенных модулей makefile есть переменные (переключатели) выбора модуля. – ysap

Смежные вопросы