2009-09-17 7 views
5

나는 이런 configure.ac 파일을 만든 :완전히 확장 된 변수를 구성 해제하는 방법은 무엇입니까?

이것의 목적은 구성 스크립트가 set를 사용하여 생성 가능한 모든 환경 변수를 인쇄하는 것입니다, 그래서이 할

AC_INIT() 
set 
:

[email protected]:~$ autoconf 
[email protected]:~$ ./configure 

을하는

build= 
cache_file=/dev/null 
IFS=' 
' 
LANG=C 
LANGUAGE=C 
datarootdir='${prefix}/share' 
mandir='${datarootdir}/man' 
no_create= 

과 같이 많은 변수를 인쇄합니다. 문제는 :

  1. 내가 ${prefix}/share 같은 변수를 확장하려는 -하지만 파일 example.sh에 모든 배관 및 작동하지 않습니다 떠들썩한 파티를 사용하여 실행, 배쉬는 UID와 같은 읽기 전용 변수를 수정에 대한 불만 때문에 확장 자체가 작동하지 않는 것 같습니다.
  2. 나는 확장이 작동하는 곳의 makefile를 사용하여 시도하지만, 위의 출력에 같은 문자열에서 줄 바꿈에 대해 사람이 어떻게 구성의의 완전히 확장 버전을하는 아이디어가 있습니까 IFS=' causes an error message Makefile:24: *** missing separator. Stop.

라인을 불평 산출?

+0

안녕! 왜 그렇게하고 싶은지 설명해 주시겠습니까? 어려운 문제를 해결하기 위해 노력하고있는 것처럼 들리는 질문은 들립니다. (예를 들어,'$ datadir'과 같은 변수의 확장 된 값을 검색하고 싶다면 더 간단한 방법이 있습니다.) – adl

+0

리눅스 시스템과 독립적으로 쉘 스크립트 템플릿을 만들고 싶습니다. 그래서 저는 서버를 설정하고 몇 가지 매개 변수의 수정 만 필요로하는 두 번째 인스턴스에 대해 동일한 스크립트를 사용하여 스크립트를 만들 수 있습니다. 템플릿 엔진 메신저 검색/스크립트 변수 바꾸기 이 작업을 수행하려면 모든 엔진을 초기화해야합니다. 변수들 또는 대체되지 않을 것입니다. –

+0

@adl 그것을 다루는 '쉬운'방법은 무엇입니까? 또한이 문제로 어려움을 겪고 있습니다. –

답변

6

autoconf가 설명서 (내 기억 나 정확한 위치를 찾을 수없는 것은) (또는 Automake의를 사용하는 일이면 .am) "수동"는 Makefile.in 내에서 변수 치환의 같은 종류의 일을하는 것이 좋습니다 :

Makefile.in

[...] 
foo.sh: foo.sh.in 
     $(SED) \ 
      -e 's|[@][email protected]|$(prefix)|g' \ 
      -e 's|[@][email protected]|$(exec_prefix)|g' \ 
      -e 's|[@][email protected]|$(bindir)|g' \ 
      -e 's|[@][email protected]|$(datarootdir)|g' \ 
      < "$<" > "[email protected]" 
[...] 

foo.sh.in

#!/bin/sh 
[email protected]@ 
du "$datarootdir" 
+1

Ref : http://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts – Lekensteyn