Нужно правило зависимости make-файла, которое может обрабатывать отсутствующие файлы

Мы используем GNU Make для нашей системы.В конце наших make-файлов у нас есть include, называемый Makedepends, который генерирует кучу файлов .d с помощью ключа -MM на gcc.Затем мы включаем файл .d для каждого файла .cc, используя строку include $ (CXXFILES: .cc = .d).Но когда мы удаляем файл или перемещаем файлы, шаг зависимостей прерывается, и нам приходится вручную удалять файлы .d (даже make clean не работает, потому что зависимости не работают)Есть ли способ сгенерировать эти файлы зависимостей .d или включить эти файлы зависимостей .d, которые будут корректно обрабатывать удаление или перемещение файлов?РЕДАКТИРОВАТЬ: Например: у меня есть serial.cc и makefiles генерируют файл serial.d, который зависит от buffer.h, но затем я изменяю его, чтобы мне больше не нужен buffer.h, и удаляю buffer.h.В следующий раз, когда я запущу make, он захлебнется, потому что он содержит файл .d, который все еще делает serial.o зависимым от buffer.h.
4 голоса | спросил MattSmith 27 +03002008-10-27T06:25:23+03:00312008bEurope/MoscowMon, 27 Oct 2008 06:25:23 +0300 2008, 06:25:23

3 ответа


0
В http://make.mad-scientist.net/papers/advanced-auto-dependency-generation есть описание этой конкретной проблемы и несколько способов ее решения.Первый немного ошибочен, но «продвинутый», по сути, точен.
ответил wnoise 27 +03002008-10-27T06:50:49+03:00312008bEurope/MoscowMon, 27 Oct 2008 06:50:49 +0300 2008, 06:50:49
0
Две возможности:Во-первых, вы можете добавить правило в ваш Makefile для запуска шага зависимости:Если нет, то от ---- + + ----: = 1 = раздел ---- +: = 2 =: + ---- страницы для GNU Make:Например, при тестировании make-файла вас может не волновать, содержат ли исходные файлы реальные данные, только то, что они существуют.Тогда вы можете сделать это:чтобы все исходные файлы, необходимые (как предварительные условия), создавались автоматически.Будет ли это работать для создания пустых файлов ---- +: = 4 =: + ---- для вас?
ответил Adam Liss 27 +03002008-10-27T06:43:33+03:00312008bEurope/MoscowMon, 27 Oct 2008 06:43:33 +0300 2008, 06:43:33
0
Если вы используете makepp с параметром ---- +: = 0 =: + ---- , он заметит файлы, которые больше не собираются, и удалит их.Если для вас это нормальный вариант использования, вы можете поместить эту опцию в ---- +: = 1 =: + ---- в корне дерева сборки, и она всегда будет использоваться.Но, конечно, makepp сам обрабатывает все эти определения зависимостей, поэтому вам не нужно загромождать ваш make-файл.Это даже лучше, чем ваш подход, потому что он может вовремя генерировать необходимые заголовки, чтобы компилятор мог их забрать, где ---- +: = 2 =: + ---- потерпит неудачу.Существует гораздо больше, чтобы сделатьpp.Помимо выполнения почти всего, что может сделать GNU make, есть еще много полезных вещей, и вы даже можете расширить свои make-файлы с помощью некоторого программирования на Perl.
ответил Daniel 15 PMpMon, 15 Apr 2013 17:36:22 +040036Monday 2013, 17:36:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132