Как с помощью autoconf / automake указать пути к включаемым файлам? - PullRequest
4 голосов
/ 19 сентября 2011

Допустим, я хочу, чтобы make-файл генерации передавал некоторые конкретные пути заголовков в g ++.

Что мне нужно добавить в configure.ac или Makefile.am, чтобы указать это?

(примечание - я не хочу передавать его в CPPFLAGS с помощью ./configure. Я хочу, чтобы эти пути запекались до этого шага)

EDIT: В частности, я хочу включить, скажем, / usr / include / freetype и /mypath/include.

Я поставил AC_CHECK_HEADERS ([freetype / config / ftheader.h]), и он проходит, но, похоже, не добавляет его в -I, переданный в g ++.

Я также попытался добавить CPPFLAGS = -I.: / Usr / include / freetype: / mypath / include, но он облажался и дважды поставил -I, первый как -I. и он игнорирует 2-й.

Ответы [ 2 ]

9 голосов
/ 01 октября 2011

Жесткие пути кодирования в файлах пакетов - абсолютно неправильная вещь. Если вы решите сделать это, то вам нужно знать, что вы нарушаете основные правила сборки пакета с помощью автоинструментов. Если вы указываете /mypath/include в файлах пакета, вы указываете вещи, относящиеся к вашей машине, в пакете, который предназначен для работы на всех машинах; ясно, что это неправильно. Похоже, что вы хотите, чтобы ваш пакет (при сборке на вашем компьютере) искал заголовочные файлы в /mypath. Это легко сделать, не подвергая опасности свою посылку. Есть (как минимум) 3 способа сделать это:

  1. Используйте файл config.site. В /usr/local/share/config.site (создайте этот файл при необходимости) добавьте строку:

    CPPFLAGS="$CPPFLAGS -I/mypath/include"
    

    Теперь любой пакет, использующий сценарий конфигурирования, сгенерированный автоконфом, с префиксом по умолчанию (/usr/local) добавит -I/mypath/include к CPPFLAGS, и будут найдены заголовки в /mypath/include.

  2. Если вы хотите, чтобы назначение выполнялось для всех сборок (не только для тех, которые будут установлены в /usr/local), вы можете использовать это:

    Поместите ту же строку, указав CPPFLAGS в $HOME/config.site, и установите CONFIG_SITE=$HOME/config.site в среде вашей оболочки по умолчанию. Теперь каждый раз, когда вы запускаете сценарий конфигурирования, сгенерированный автоконфом, будут выполняться назначения из $HOME/config.site.

  3. Просто укажите CPPFLAGS в среде вашей оболочки по умолчанию.

Все эти решения имеют два основных преимущества перед изменением файлов сборки. Во-первых, они будут работать для всех сгенерированных autoconf пакетов (при условии, что они следуют правилам и не занимаются назначением пользовательских переменных, таких как CPPFLAGS в файлах сборки). Во-вторых, они не помещают информацию о вашей машине в пакет, который должен работать на всех машинах.

8 голосов
/ 24 сентября 2011

Поскольку вопрос был о том, что помещать в файл автозапуска, я бы подумал, что AM_CPPFLAGS - это правильная переменная для добавления включений и определений для всех компиляций C / C ++.См. http://www.gnu.org/software/automake/manual/html_node/Program-Variables.html

Пример:

AM_CPPFLAGS = -I/usr/local/custom/include/path
...