У меня есть приложение на C, которое я конвертирую из набора Make-файлов с ручным кодированием в 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@