сделать зависимостью
makedependent — это инструмент Unix, используемый для создания зависимостей исходных C. файлов Версия Microsoft Windows была доступна в 2002 году. [ 1 ] и последний раз обновлялся в 2007 году на UnxUtils . [ 2 ]
История
[ редактировать ]makedepend
был разработан в рамках MIT проекта Project Athena . Он широко использовался при сборке X11 и вспомогательных пакетов, но с тех пор был вытеснен средствами генерации зависимостей различных компиляторов и теперь используется в основном как запасной вариант на случай худшего случая, например, depcomp и GNU Automake .
Использование
[ редактировать ]makedepend
вызывается со списком исходных файлов:
makedepend [options] foo.c bar.c ...
Однако чаще всего он вызывается как цель из make-файла , обычно под depend
цель, такая, что make depend
вызовет makedepend
во всех исходных файлах проекта. Одним из таких примеров цели может быть следующее:
SRCS = file1.c file2.c ...
CFLAGS = -O -DHACK -I../foobar -xyz
depend:
makedepend -- $(CFLAGS) -- $(SRCS)
Цель
[ редактировать ]обязательно При создании проектов на языке C для инкрементальной компиляции (и полезно для чистой компиляции) иметь возможность отслеживать зависимости между модулями компиляции . C выражает интерфейсы между модулями компиляции через файлы заголовков ; поэтому часто бывает необходимо перестроить модуль компиляции при изменении содержащегося в нем заголовка. make должен быть проинформирован об этих зависимостях.
makedepend
решает эту проблему, анализируя код исходных файлов C для создания списка зависимостей (эти заголовочные файлы включены прямо или косвенно). Он способен понимать конструкции условной компиляции , чтобы не создавать чрезмерных зависимостей. Затем он добавляет в Makefile правила, выражающие зависимости.
Недостатки
[ редактировать ]Большая часть современного исходного кода использует «условную компиляцию», чтобы контролировать, какую часть исходного кода следует использовать, на основе символов препроцессора C, определенных компилятором. Эти символы могут указывать имя или семейство компилятора, номер версии, операционную систему и размер слова. В зависимости от этих символов включенные файлы могут меняться. Однако makedependent сама по себе не является компилятором и не определяет таких символов, поэтому вывод может быть неверным. Кроме того, некоторый код намеренно выдает явную ошибку, если он не может распознать ни один поддерживаемый компилятор, и, таким образом, makedependent вообще не сможет его использовать.
Альтернативы
[ редактировать ]Большинство современных компиляторов предоставляют флаг (часто -M
), который использует собственный анализатор исходного кода компилятора для создания списка зависимостей. [ нужна ссылка ] . Это может быть предпочтительнее makedepend
потому что это снижает вероятность того, что созданные зависимости будут противоречить собственному поведению компилятора.
Поскольку компиляторы принимают разные флаги для генерации зависимостей и могут вести себя по-разному при выводе информации о зависимостях, желательно использовать сценарий-оболочку, который может соответствующим образом вызывать компилятор (и возвращаться к makedepend
при необходимости). Одним из популярных таких сценариев-оболочек является depcomp , который распространяется и используется GNU Automake . [ 3 ]
Solaris make включает поддержку отслеживания зависимостей, которая активируется путем указания «цели специальной функции». .KEEP_STATE
. [ 4 ]
Ссылки
[ редактировать ]- ^ «Добавлена зависимость от дистрибутива X11» . Архивировано из оригинала 9 февраля 2006 г. Проверено 17 сентября 2013 г.
- ^ Проект UnxUtils, размещенный на SourceForge.
- ^ Отслеживание зависимостей в Automake , Руководство Automake
- ^ Solaris make (1) Man-страница
Внешние ссылки
[ редактировать ]- Linux пользователя по командам Руководство : создавать зависимости в make-файлах –
- Каталог, в котором исходный код доступен