Нужно правило зависимости make-файла, которое может обрабатывать отсутствующие файлы - PullRequest
4 голосов
/ 27 октября 2008

Мы используем GNU Make для нашей системы. В конце наших make-файлов у нас есть include, называемый Makedepends, который генерирует кучу файлов .d с помощью ключа -MM на gcc. Затем мы включаем файл .d для каждого файла .cc, используя строку include $ (CXXFILES: .cc = .d). Но когда мы удаляем файл или перемещаем файлы, шаг зависимостей прерывается, и нам приходится вручную удалять файлы .d (даже make make не работает, потому что зависимости не работают)

Есть ли способ создать эти файлы зависимостей .d или включить эти файлы зависимостей .d, которые будут корректно обрабатывать удаление или перемещение файлов?

РЕДАКТИРОВАТЬ: Например: у меня есть serial.cc, и make-файлы генерируют файл serial.d, который зависит от buffer.h, но затем я изменяю его, чтобы мне больше не нужен buffer.h, и удаляю буфер .час. В следующий раз, когда я запущу make, он захлебнется, потому что он включает в себя файл .d, который все еще делает serial.o зависимым от buffer.h.

Ответы [ 3 ]

6 голосов
/ 27 октября 2008

http://make.mad -scientist.net / paper / advanced-auto-dependency-generation содержит описание этой конкретной проблемы и несколько способов ее решения. Первый немного ошибочен, но «продвинутый», по сути, точный.

0 голосов
/ 15 апреля 2013

Если вы используете makepp с параметром --rm-stale, он заметит файлы, которые больше не могут быть собраны, и удалит их. Если для вас это нормальный вариант использования, вы можете поместить эту опцию в .makepprc в корне дерева сборки, и она всегда будет использоваться.

Но, конечно, makepp сам обрабатывает все это обнаружение зависимостей, поэтому вам не нужно загромождать ваш make-файл. Это даже лучше, чем ваш подход, потому что он может своевременно генерировать необходимые заголовки, чтобы компилятор мог подобрать, где gcc -MM не удастся.

Есть еще много чего сделать. Помимо выполнения почти всего, что умеет GNU make, есть еще много полезных вещей, и вы даже можете расширить свои make-файлы с помощью некоторого программирования на Perl.

0 голосов
/ 27 октября 2008

Две возможности:

Сначала вы можете добавить правило в ваш Makefile для запуска шага зависимости:

.SUFFIXES: .d

%.d::
   makedepend_command_here

Если нет, то из раздела Last Resort страницы info для GNU Make:

Например, при тестировании makefile, вам может быть все равно, если исходные файлы содержат только реальные данные что они существуют. Тогда вы могли бы сделать это:

 %::
         touch $@

, чтобы вызвать все необходимые исходные файлы (как предварительные условия), которые будут созданы автоматически.

Будет ли это работать для создания пустых .d файлов для вас?

...