LINUX.ORG.RU

Ищу аналог make, понимающий (дедуцирующий) зависимости из заданных коммандных строк в Makefile


0

0
make требует избыточной (чаще всего) информации.

1. Простейший вариант:

myprog file1 file2 > file3

означает что file3 зависит от file1 file2

2. Посложнее:

gcc file.c

означает что file.o зависит от file.c и всех его инклюдов (которые можно получить, дернув соотв. утилитку).

Нужен make, умеющий дедуцировать такое (и желательно добавлять правила для дедукции).

Это - одна из причин создания ЯП D, а именно, возможность узнать зависимости между модулями. В C/C++ это весьма сложно, и главная причина этому - препроцессор, который может вытворять самые непредсказуемые трюки, потому приходится описывать правила сборки руками.
ShprotX ★
()
Ответ на: комментарий от Eshkin_kot
> либо получать их у gcc автоматически, с помощью ключей -M

Ключи -M дают список включаемых файлов (практически всегда это - файлы заголовков .h), а из них далеко не всегда можно получить список файлов исходных кодов, потому что препроцессор.
Да, можно следовать своим определенным правилам, позволяющим легко получать зависимости, но им нужно следовать.
ShprotX ★
()
Ответ на: комментарий от ShprotX
> а из них далеко не всегда можно получить список файлов исходных кодов, потому что препроцессор.

хмм, почему ? -M это и есть препроцессор, в смысле что он там запускается при генерации зависимостей:

-M Instead of outputting the _result of preprocessing_, output a rule suitable for make describing the dependencies

если Вы про #ifdef PLATFORM1 так эти зависимости на другой платформе быть не обязаны и если у нас не PLATFORM1 то и учитывать их не надо, имхо.

автотулсы как раз используют -M если я не ошибаюсь.

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot
Извиняюсь, что потревожил, это я туплю: мы говорим про разные вещи, потому что я плохо прочитал первый пост.
ShprotX ★
()
А вот более другие make вроде scons/cmake умеют сами определять зависимости (или их проще описать, см. однопроходный jam вместо многопроходного make)
anonymous
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.