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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.