Как сказать AC_SUBST не подставлять переменные в аргументы?

Я использую autotools для создания своего проекта, и я хотел бы глобально установить AM_CPPFLAGS в -I $ (top_srcdir) / include.

https://stackoverflow.com/a/325436/2592351 мне помог этот ответ, и я делаю хак «include $ (top_srcdir) / include», и он работает.

Однако я хотел бы сделать описанный там способ «AC_SUBST», так как он выглядит чище. Проблема заключается в том, когда я добавляю это в свой файл configure.ac:

AC_SUBST([AM_CPPFLAGS], [-I$(top_srcdir)/include])

тогда $ (top_srcdir) раскрывается слишком рано, и я получаю AM_CPPFLAGS = -I / include в subdir / Makefile {,. in}.

И я не понимаю, как избежать этого.

-I@top_srcdir@/include
-I\$(top_srcdir)/include
-I$$(top_srcdir)/include

все это не удалось по разным причинам.

Пожалуйста помоги. Как мне написать AC_SUBST, чтобы $ (top_srcdir) не экранировался до того, как он попадет в Makefile {,. In}? Или, может быть, я должен использовать что-то другое, чем AC_SUBST?

3

Решение

Не установлен AM_CPPFLAGS в вашем configure.ac, Если вы обнаружите, что повторяете одну и ту же преамбулу в нескольких Makefile.am вы должны использовать нерекурсивный автомат.

Но в этом конкретном случае, вам следует сойти с рук, если вы делаете

AM_CPPFLAGS='-I$(top_srcdir)/include'
AC_SUBST([AM_CPPFLAGS])

Потому что тогда строка устанавливается в кавычки в переменной bash, а затем раскрывается как литерал. С помощью AC_SUBST чтобы установить его, он цитируется "" что тогда вызывает $(top_srcdir) быть расширенной оболочкой.

1

Другие решения


По вопросам рекламы [email protected]