2014-06-10 3 views
3

autotools를 사용하여 프로젝트를 빌드하고 있으며 AM_CPPFLAGS를 -I $ (top_srcdir)/include로 전역 설정하고 싶습니다.AC_SUBST에 인수에서 변수를 대체하지 않도록 알리는 방법은 무엇입니까?

https://stackoverflow.com/a/325436/2592351이 답변은 저를 도왔으며 "include $ (top_srcdir)/include"해킹을 수행하고 있습니다.

그러나 나는 "AC_SUBST"방법을 사용하여 깨끗하게 보였습니다.

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

후 $ (top_srcdir가) 너무 빨리 확장되고 난 하위 디렉터리/메이크 {인치}에 포함 AM_CPPFLAGS = -I /를 얻을 : 내 configure.ac이를 추가 할 때 문제입니다.

그리고 나는 그것을 벗어나는 법을 모르겠습니다.

[email protected][email protected]/include 
-I\$(top_srcdir)/include 
-I$$(top_srcdir)/include 

이 모든 것은 여러 가지 이유로 실패했습니다.

도와주세요. $ (top_srcdir)이 Makefile {,. in}에 도착하기 전에 이스케이프 처리되지 않도록 AC_SUBST를 어떻게 작성해야합니까? 아니면 AC_SUBST 이외의 다른 것을 사용해야합니까?

+1

전혀 테스트하지 말고'[-I @ S | @@ {: @ top_srcdir @ :} @/include]'를 시도하십시오. https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Quadrigraphs.html#Quadrigraphs – zwol

+0

@Zack 고맙습니다.하지만 조만간 대체 될 것입니다. –

+0

Drat. 'grep AM_CPPFLAGS config.status configure'의 출력을 게시 할 수 있습니까? (configure를 실행 한 후) 물론 가능합니까? – zwol

답변

1

configure.acAM_CPPFLAGS을 설정하지 마십시오. Makefile.am 여러 번 같은 서문을 반복한다면 non-recursive automake을 사용해야합니다. 다음 문자열이 bash는 변수에 인용 설정되고, 이후 리터럴로 확장하기 때문에 당신이

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

을 할 경우

그러나이 특별한 경우

, 당신은 그것으로 도망한다. AC_SUBST을 사용하여 설정하면 ""에 의해 인용되고 $(top_srcdir)은 셸로 확장됩니다.

+0

AC_SUBSTing AM_CPPFLAGS해도됩니다. AC_SUBST의 호출에서 작은 따옴표를 추가하는 것만으로도 작동합니다 :'AC_SUBST ([AM_CPPFLAGS], [ '- I $ (top_srcdir)/include'])'' –

관련 문제