.h генерируется из .h.in? - PullRequest
       42

.h генерируется из .h.in?

2 голосов
/ 14 августа 2010

В файле .h есть определения структур, которые моя библиотека создает после того, как я ее создаю ... но я не могу найти их в соответствующем файле .h.in.Может кто-нибудь сказать мне, как все это работает и откуда оно получает дополнительную информацию?

Если быть точным: я собираю pth, библиотеку потоков в пользовательском пространстве.У него есть pth_p.h.in, который не содержит определения структуры, которое я ищу, но когда я собираю библиотеку, появляется pth_p.h, и у него есть определение, которое мне нужно.

Фактически, я искал каждый отдельный файл в библиотеке, прежде чем он был построен, и не могу найти, где он генерирует определение структуры.

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Pth использует GNU Autoconf , Automake и Libtool . Запустив ./configure, вы запустите сценарий оболочки, который в итоге запустит m4 , чтобы обнаружить наличие целого ряда различных системных атрибутов и внести изменения в ряд файлов.

Похоже, что все сводится к ./configure, генерирующему Makefile из Makefile.in и затем запускающему что-то через make, которое запускает подкоманду shtool scpp:

pth_p.h: $(S)pth_p.h.in
    $(SHTOOL) scpp -o pth_p.h -t $(S)pth_p.h.in -Dcpp -Cintern -M '==#==' $(HSRCS)

Неясная ссылка, но вот справочная страница shtool-scpp , которая описывает ее как:

Эта команда является дополнительной ANSI C препроцессор исходного файла для обмена cpp (1) сегменты кода, внутренние переменные и внутренние функции. намерение для этого исходит от написания библиотеки в ANSI C. Здесь общее общий внутренний заголовочный файл обычно используется для обмена информацией между исходные файлы библиотеки.

Операция по разбору спец. конструирует в файлах, генерирует несколько вещи из этих конструкций и вставьте их в позицию метки в файле записав вывод в ofile. Кроме того, файлы никогда не коснулся или изменил. Вместо конструкции удаляются позже cpp (1) фаза процесса сборки. единственным условием является то, что каждый файл имеет `` "#include" "ofile" "" '' на сверху.

0 голосов
/ 14 августа 2010

.h.in, вероятно, обрабатывается в скрипте configure (созданном из configure.ac), ищите

AC_CONFIG_FILES([thatfile.h])

Он заменяет переменные вида @VAR@ в файле .inих значения.

Редактировать: Только что заметил, если я прав, вы должны пометить свой вопрос

...