Явные промежуточные объектные файлы в GNU AutoMake

У меня есть приложение C, которое я конвертирую из набора созданных вручную файлов Makefile в GNU AutoMake. В нем есть подкаталог, содержащий заголовок интерфейса и несколько зависящих от платформы реализаций. В настоящее время выбирается реализация и создается объектный файл с фиксированным именем в этом каталоге. Код, использующий интерфейс драйвера, затем связывается с этим объектным файлом и автоматически получает нужный драйвер.

Как лучше всего преобразовать эту систему для использования AutoTools? У меня уже есть AutoConf, создающий замену для правильного файла реализации драйвера. Я просто не могу понять, как получить цель AutoMake, переменные EXTRA_*_SOURCES и *_LDADD которой я могу поместить файлы реализации. Мне просто нужно отказаться от промежуточного объектного файла и поместить их в список для целевой программы, которая использует их?

РЕДАКТИРОВАТЬ: Решено благодаря ptomato.

Из-за разрешения зависимостей Automake все возможные источники должны быть названы в *_SOURCES и EXTRA_*_SOURCES, как описано в раздел "Условные источники" руководства. Следовательно, строфа библиотеки на самом деле:

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = driver.h
EXTRA_libdriver_a_SOURCES = driver-linux.c driver-windows.c driver-osx.c
libdriver_a_LIBADD = @DRIVERIMPL@

person Sam Hanes    schedule 26.06.2010    source источник


Ответы (1)


Вы можете создать удобную библиотеку и статически связать ее со своим приложением. В конечном итоге между этим и объектным файлом очень мало различий. См. эту страницу Automake руководство по эксплуатации. В основном это выглядит так:

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = @CORRECT_IMPLEMENTATION_FILE@
myprogram_LDADD = libdriver.a

где ваш промежуточный объектный файл с фиксированным именем - libdriver.a, а ваше приложение - myprogram.

Однако мне это кажется излишне сложным. Я не вижу причин, по которым вы, как вы предлагаете, не должны отказываться от промежуточного объектного файла и помещать файлы реализации в целевую программу, которая их использует.

person ptomato    schedule 29.06.2010
comment
Я считаю, что изначально это было реализовано таким образом, чтобы Makefile, управляющий сборкой драйвера, мог находиться в том же каталоге, что и код драйвера. Я не уверен, что согласен с этой философией, но это не мой проект, поэтому я буду придерживаться его. - person Sam Hanes; 03.07.2010