У меня есть файл C, который включает в себя заголовок. Этот заголовок находится в разных местах в зависимости от дистрибутива Linux, на котором работает сборочная машина.
Какой самый чистый способ обнаружить заголовок в разных местах с помощью автоинструментов?
Используйте стандарт AC_CHECK_HEADERS
макро.
Это создаст правильные определения препроцессора для заголовков.
Например:
AC_CHECK_HEADERS([somepath/foo.h someotherpath/foo.h])
Создаст препроцессор определяет HAVE_SOMEPATH_FOO_H
или же HAVE_SOMEOTHERPATH_FOO_H
в зависимости от того, какие из заголовков найдены. Или оба, если оба заголовка найдены. Используйте эти макросы, чтобы решить, какой заголовок включить.
Сопровождающий не должен беспокоиться о таких вещах. Любой разумно сконструированный дистрибутив будет настроен таким образом, чтобы препроцессор мог найти заголовочный файл, где бы он ни находился, если он установлен в системе (в отличие от пользовательского $ HOME или другого нестандартного расположения). Настройка цепочки инструментов для поиска заголовка, если он установлен в нестандартном месте, является специфической для платформы задачей, которую проще всего решить в Linux, настроив CPPFLAGS
, Например, пользователь может запустить
./configure CPPFLAGS=-I/p/a/t/h
(настройка сценариев, созданных в более старых версиях autoconf, может потребовать вызова CPPFLAGS=-I/p/a/t/h ./configure
) или она может добавить /p/a/t/h
в CPATH
или используйте любой другой доступный метод, чтобы сообщить препроцессору, где искать включаемые файлы. Как сопровождающему, все, что вам нужно сделать, это убедиться, что скрипт configure проверяет, правильно ли настроил пользователь цепочку инструментов, и вы делаете это путем включения вызова AC_CHECK_HEADERS
в configure.ac
:
AC_CHECK_HEADERS([foo.h])