Что происходит с исходным файлом .h при использовании автоинструментов? - PullRequest
0 голосов
/ 24 марта 2019

Я создаю оболочку на C. Созданный мной файл .tar.gz прекрасно работает.Однако, когда я распаковываю это, исходный файл заголовка, который я использовал при создании указанного файла, изменяется, чтобы содержать код, используемый autotools.Есть ли способ сохранить оригинальный файл .h?

Для справки, это мой файл configure.ac:

AC_INIT([program_name], 1.0)  
AM_INIT_AUTOMAKE  
AC_PROG_CC  
AC_CONFIG_HEADERS([shell.h])  
AC_CONFIG_FILES(Makefile)  
AC_OUTPUT

Программа Makefile.am:

bin_PROGRAMS = shell  
shell_SOURCES = main.c functions.c

Я надеялся, что когда я перешлю оболочку.h Я бы увидел оригинальные #include и #define, которые я сделал.Однако он просто имеет типичные autotools #defines о пакете и версии нет.

Любая помощь в этом, а также объяснение того, что на самом деле здесь происходит, будет принята с благодарностью, поэтому я не буду делать это снова.

Ответы [ 2 ]

1 голос
/ 25 марта 2019

AC_CONFIG_HEADERS ( документация ) выводит сгенерированный Autoconf заголовочный файл с информацией о пакете и среде, использованной для его компиляции.

Обычно этот файл называется config.h, новы, кажется, назвали его shell.h, который переписал другой shell.h файл, который вы создали вручную, я полагаю?

Если это так, решение будет использовать другое имя в AC_CONFIG_HEADERS.

0 голосов
/ 25 марта 2019

Как уже заметил @ptomato, AC_CONFIG_HEADERS предназначен для запроса, чтобы скрипт configure создал файл заголовка для вас при запуске, в котором он определяет макросы, передающие различную информацию, которую он почерпнул, например, результаты различные тесты. Аргумент макроса указывает имя, которое должен иметь этот сгенерированный файл. Это альтернатива всей этой информации, передаваемой командам компиляции в командной строке. Это не имеет никакого отношения к именованию файла заголовка, предоставленного среди источников, и это, безусловно, приведет к замене любого такого заголовка. Также бесполезно, если ваши источники не #include обозначают заголовок.

Неясно, нужен ли вам такой заголовок конфигурации, но если shell.h - это предоставленный вами заголовок, и вы не хотите, чтобы configure перезаписывал его, не указывайте его имя в AC_CONFIG_HEADERS. Вероятно, вы можете вообще обойтись без AC_CONFIG_HEADERS, хотя мне лично это нравится, потому что его использование облегчает чтение конечного результата make. Если вы продолжаете использовать его, вам нужно выбрать другое имя (например, обычное config.h), и вам нужно иметь все ваши источники C #include, что заголовок, прежде чем они сделают что-либо еще.

Чтобы сообщить Automake заголовок, предоставленный среди источников, которые в конечном итоге не установлены, просто укажите его среди _SOURCES хотя бы одной цели. Automake знает, что не нужно пытаться скомпилировать заголовки, но перечисление их среди ваших источников гарантирует, что они будут упакованы в дистрибутивные архивы, созданные с помощью make dist. Существуют альтернативы, такие как перечисление таких заголовков в EXTRA_DIST, но они менее обычны.

...