Рекурсивный Делают - друг или противник? [закрытый]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

22
задан Bill the Lizard 7 August 2012 в 14:34
поделиться

6 ответов

Первая вещь, которую необходимо иметь в виду (только для устранения любого недоразумения) состоит в том, что мы не говорим о сингле по сравнению с несколькими make-файлами. Разделение Вашего make-файла в одном на подкаталог является, вероятно, хорошей идеей в любом случае.

Рекурсивные make-файлы плохи, прежде всего, потому что Вы делите свое дерево зависимостей в несколько деревьев. Это предотвращает зависимости между, делают экземпляры из того, чтобы быть выраженным правильно. Это также заставляет (части) дерево зависимостей быть повторно вычисленным многократно, который является проблемой производительности в конце (хотя обычно не большой.)

существует несколько приемов, которые необходимо использовать для надлежащего использования сингла - делают подход, особенно когда у Вас есть большая кодовая база:

Первый, используйте GNU, делают (Вы уже делаете, я вижу). GNU делает, имеет много функций, который упрощает вещи, и Вы не должны будете волноваться о совместимости.

115-секундный, используйте целевые значения переменных. Это позволит Вам иметь, например, различные значения CFLAGS для различных целей, вместо того, чтобы вынудить Вас иметь единственный CFLAGS в своем всем сделайте:

 main: CFLAGS=-O2
 lib: CFLAGS=-O2 -g

В-третьих, удостоверьтесь, что Вы используете VPATH/vpath для полного объема, поддерживаемого GNU, делают.

Вы также хотите удостовериться, что у Вас нет нескольких исходных файлов с тем же именем. Одно ограничение VPATH - то, что он не позволяет Вам иметь целевые определения VPATH, таким образом, названия Ваших исходных файлов должны будут сосуществовать в единственном "пространстве имен VPATH".

23
ответ дан JesperE 29 November 2019 в 04:12
поделиться

Статья, названная "Рекурсивной, Делает Продуманными Вредный", может быть найден здесь: http://miller.emu.id.au/pmiller/books/rmch/?ref=DDiyet.Com . (Или в проект Aegis в SourceForge.)

Это исследует проблемы с рекурсивными make-файлами и рекомендует подход единственного make-файла.

18
ответ дан 2 revs, 2 users 50% 29 November 2019 в 04:12
поделиться

Выполненный, не идите, к cmake.org и получайте Cmake, один из лучших доступных инструментов сборки.

Вы будете все еще использовать GNU, делают, но в этом случае CMake генерирует make-файлы для Вас.

я не могу гарантировать 100%, но я должен все же столкнуться со случаем, где он правильно не обработал зависимости между подкаталогами правильно (т.е. проблема, которая заполоняет рекурсивное, делают). По крайней мере намного легче поддержать Cmakefiles, чем make-файлы. Наиболее рекомендуемый.

не используют автоинструменты GNU - тот способ, которым находится безумие!

4
ответ дан Alastair 29 November 2019 в 04:12
поделиться

Польза, которую я извлек из этого в прошлом, - то, что это легче к файлам типа "build" в единственном подкаталоге. Можно сделать это с зависимостями, но это - немного больше работы для хранения всех целей прямо. В основном это облегчает вносить изменения и тестировать одну библиотеку, не имея необходимость иметь дело с полной сложностью большего проекта.

0
ответ дан Dana the Sane 29 November 2019 в 04:12
поделиться

Для добавления третьей опции Вы могли использовать Автоинструменты GNU. Главным образом используемый по другим причинам, но может также полезный при организации сборки с несколькими каталогами.

http://www.lrde.epita.fr/~adl/autotools.html

нужно отметить, тем не менее, что результатом является рекурсивная версия.

0
ответ дан ypnos 29 November 2019 в 04:12
поделиться

Проблема с рекурсивным делает, время наверху оценки всех различных make-файлов по сравнению с оценкой одного большого make-файла. Часть этого просто порождает процессы, но также и (IIRC), Вы склонны быть принужденными к предположению, которое другой делает файлы, сделал что-то и восстановление, когда Вы не действительно должны.

Мое взятие на нем должно иметь единственный make-файл на "Единицу", которая более или менее составляет наличие make-файла для каждого блока кода, который Вы ожидаете, мог использоваться на своем собственном (например, как независимая библиотека)

OTOH, мой текущий проект повреждает это повсеместно, поскольку я генерирую make-файлы во время сборки.: b

-1
ответ дан BCS 29 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

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