Какой смысл этой архитектуры make-файла? - PullRequest
2 голосов
/ 15 сентября 2009

У меня есть программа, которую я пытаюсь скомпилировать, давайте назовем ее P. P нужна сторонняя библиотека L1. L1 нужна другая библиотека, L2. Пока что ничего странного.

Makefile для P в основном просто устанавливает некоторые переменные, а затем включает make-файл для L1.

Makefile для L1 выполняет целую кучу установок переменных и прочего (включая, например, список файлов для компиляции), а затем включает make-файл L2.

L2s makefile выполняет много работы и фактически делает все 3.

Моя проблема в том, что L2 не хочет компилироваться.

Однако у меня уже есть бинарная версия обеих библиотек для моей системы, но я не могу их использовать, потому что make-файл L2 выполняет всю работу.

Кроме того, если вы компилируете с динамическими библиотеками, он будет искать библиотеки, загружаемые в каталог компиляции, во время выполнения, а не в том месте, где они находятся в рабочей системе.

Мой вопрос: какого чёрта они спроектировали это так?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

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

1 голос
/ 16 сентября 2009

Это выглядит для меня как нечто органично выросшее:

  1. Кто-то написал Makefile L2 и сделал его очень сложным и мощным. Этот Makefile использует переменные, такие как списки объектов, и строит их из того, с чего они начинают (как, скажем, ничего).
  2. Кто-то (еще?) Должен был написать Makefile L1 и решил сделать контрейлер, создав списки L1 и затем передав все в Makefile L2, вместо того, чтобы пытаться заново изобрести весь этот механизм.
  3. Кто-то в вашем магазине должен был написать Makefile от P и вставить его в Makefile L1.

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

0 голосов
/ 15 сентября 2009

Я бы сказал, что для меня пахнет процессом начальной загрузки ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...