Явные промежуточные объектные файлы в GNU AutoMake - PullRequest
3 голосов
/ 26 июня 2010

У меня есть приложение на 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@

1 Ответ

2 голосов
/ 29 июня 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...