LINUX.ORG.RU

Сборка проекта — RHEL/make/gcc


0

2

Условно, имеется некоторый проект, который достаточно долго периодически успешно собирался на RHEL4.3/make-3.78.1, потом какое-то время на RHEL5.4/make-3.81. Потом на RHEL5.4 начались непонятно от чего зависящие падения, а потом сборка стала стабильно падать:

make[1]: *** No rule to make target `bla.o', needed by `blabla.a'. Stop.

Причём, если после падения повторить команду (типа make -f $makefile CC=gcc), то это место проходит и падает на следующем подобном месте. (И таким образом можно дособирать до победного конца :-D) Кусок из makefile: .c.o: $(CC) $(CFLAGS) $<

Все исходники лежат по своим директориям, но перед сборкой в директории с makefile-ом создаются симлинки на них. Если в makefile дописать VPATH=`директории с исходниками`, то сборка проходит с первого раза.

Ни исходники, ни makefile и прочие поддерживающие скрипты никогда не менялись. Непонятно, почему всё это хозяйство так себя ведет.

p/s каждый раз машина для сборки выбирается рандомно из множества конфигурационно аналогичных. вроде там ничего не обновляли.

С самого начала неправильно сделан makefile. Создание симлинков выглядит явным костылем, а починка через VPATH тому подтверждение.

Короче RTFM и переписать makefile.

ly
()
Ответ на: комментарий от cyberuta

У gmake пожалуй проблема в том что он «слишком умный», т.е. предопределена масса неявных правил, а механизм определения зависимостей слишком гибкий. Поэтому оно ломается не когда что-то не правильно, а когда соавсем все плохо. Например, указанное правило .c -> .o make знает без вас. Но это уже философия...

Ключики -d и -B позволят понять что не так.

http://www.gnu.org/software/make/manual/make.html#Implicit-Rules

http://www.gnu.org/software/make/manual/make.html#Archives

ly
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.