[Решено] automake и обновление заголовков

IDE, VCS и прочее

Модератор: Модераторы разделов

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

[Решено] automake и обновление заголовков

Сообщение Bizdelnick »

Если сборка производится голым make'ом, можно сделать так:

Код: Выделить всё

foo.o: foo.c foo.h
    $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
В результате изменение foo.h повлечёт пересборку foo.o. Вопрос: как добиться того же эффекта при использовании automake? Казалось бы, элементарнейшая вещь, но в документации по этому поводу ничего не нашёл.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8256
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [Решено] automake и обновление заголовков

Сообщение serzh-z »

Код: Выделить всё

bin_PROGRAMS = foo
foo_SOURCES = foo.c foo.h
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Решено] automake и обновление заголовков

Сообщение Bizdelnick »

foo - это не программа, это только маленький её кусок. Вариант

Код: Выделить всё

program_SOURCES = foo.c bar.c baz.c foo.h
я уже пробовал, на изменение foo.h никакой реакции.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8256
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [Решено] automake и обновление заголовков

Сообщение serzh-z »

Bizdelnick писал(а):
03.02.2015 22:09
program_SOURCES = foo.c bar.c baz.c foo.h
Это должно работать. Скорее всего, - проблемы с autoconf. И automake создаёт неверный Makefile, в котором не учитывается зависимость "program => foo.o => foo.c => foo.h". Проверь файлы, которые создаются в AC_CONFIG_FILES.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Решено] automake и обновление заголовков

Сообщение Bizdelnick »

Я несколько упростил описание проблемы, а, возможно, зря. Дело в том, что этот проект изначально писался на C, а потом переехал на C++. При этом имена файлов *.c были изменены на *.cxx, а вот *.h не менялись. То есть фактически в Makefile.am такое:

Код: Выделить всё

program_SOURCES = foo.cxx bar.cxx baz.cxx foo.h
Не может это быть причиной такого поведения?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8256
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [Решено] automake и обновление заголовков

Сообщение serzh-z »

Bizdelnick писал(а):
04.02.2015 18:07
Не может это быть причиной такого поведения?
Не должно. Если только в рабочем каталоге не остались временные файлы от старой сборки. Сделай "make distclean && ./configure && make" и загляни в .deps/foo.Po в каталоге с foo.cxx, там должна быть прописана зависимость от foo.h.

Ещё стоит заглянуть в config.log и проверить значения переменных CXX*, особенно CXXDEPMODE.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Решено] automake и обновление заголовков

Сообщение Bizdelnick »

serzh-z писал(а):
04.02.2015 20:14
Ещё стоит заглянуть в config.log и проверить значения переменных CXX*, особенно CXXDEPMODE.

Код: Выделить всё

CXXDEPMODE='depmode=gcc3'
А что там быть-то должно?
serzh-z писал(а):
04.02.2015 20:14
Сделай "make distclean && ./configure && make" и загляни в .deps/foo.Po в каталоге с foo.cxx, там должна быть прописана зависимость от foo.h
Ни такого файла, ни каталога .deps вообще нет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Решено] automake и обновление заголовков

Сообщение Bizdelnick »

Да, как водится, слона-то я и не заметил... В самом верху Makefile.am:

Код: Выделить всё

AUTOMAKE_OPTIONS = foreign no-dependencies
Если убрать no-dependencies, то даже в program_SOURCES заголовки добавлять не надо.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8256
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [Решено] automake и обновление заголовков

Сообщение serzh-z »

Bizdelnick писал(а):
04.02.2015 20:36
ни каталога .deps вообще нет.
Полагаю, что после отключения no-dependencies он появится. =)

Bizdelnick писал(а):
04.02.2015 20:50
Если убрать no-dependencies, то даже в program_SOURCES заголовки добавлять не надо.
Заголовки перечисляют в _SOURCES для того, чтобы о них знала цель "dist".
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19769
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [Решено] automake и обновление заголовков

Сообщение Bizdelnick »

serzh-z писал(а):
04.02.2015 22:12
Полагаю, что после отключения no-dependencies он появится. =)

Да, до меня уже, дошло, как оно работает.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: