Я использую 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?
Не установлен AM_CPPFLAGS
в вашем configure.ac
, Если вы обнаружите, что повторяете одну и ту же преамбулу в нескольких Makefile.am
вы должны использовать нерекурсивный автомат.
Но в этом конкретном случае, вам следует сойти с рук, если вы делаете
AM_CPPFLAGS='-I$(top_srcdir)/include'
AC_SUBST([AM_CPPFLAGS])
Потому что тогда строка устанавливается в кавычки в переменной bash, а затем раскрывается как литерал. С помощью AC_SUBST
чтобы установить его, он цитируется ""
что тогда вызывает $(top_srcdir)
быть расширенной оболочкой.