2017-11-02 20 views
0

Autoconf manualAC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_PRE 매크로 (아래 참조)에 대해 설명합니다. 나는 다음과 같은 상대적 순서로 매크로를 사용할 때AC_CONFIG_COMMANDS_PRE 및 AC_CONFIG_COMMANDS_POST를 사용하는 방법?

들은 적용되지 않습니다

configure: creating ./config.status 
sed: -e expression #1, char 1: unknown command: `|' 
sed: -e expression #1, char 1: unknown command: `|' 
sed: -e expression #1, char 1: unknown command: `|' 
: 그럼이 결과

AC_CONFIG_COMMANDS_POST([sed -e '|S["CC"]|d' config.status > config.status.xxx; mv config.status.xxx config.status]) 
AC_CONFIG_COMMANDS_POST([sed -e '|S["FLAGS"]|d' config.status > config.status.xxx; mv config.status.xxx config.status]) 
AC_CONFIG_COMMANDS_POST([sed -e '|S["ac_ct_CC"]|d' config.status > config.status.xxx; mv config.status.xxx config.status]) 
AC_OUTPUT(Makefile) 

:

## configure.ac 
... 

AC_OUTPUT(Makefile) 
AC_CONFIG_COMMANDS_POST(cmd) 
AC_CONFIG_COMMANDS_POST(cmd) 
AC_CONFIG_COMMANDS_POST(cmd) 

내가 상대 순서를 변경하는 경우

제 첫 질문은 cmd의 형식은 무엇입니까? AC_CONFIG_COMMANDS과 같이 대괄호 ([])로 묶어야합니까? 아니면 다른 것이 필요합니까?

내 두 번째 질문은 매크로의 상대적인 순서는 무엇입니까 AC_OUTPUT, AC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_POST?

제 3의 질문은 어느 시점에서 config.status 또는 Makefile으로 작성되었으므로 고칠 수 있습니까?

또한 수동 3.1.3 Standard configure.ac Layout있는 부분이 있습니다,하지만 AC_OUTPUT, AC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_POST의 상대적 순서를 설명하지 않습니다.

Makefile을 수정하는 것이 더 좋지만, Makefile이 준비되어있을 때가 아니라 config.status이 준비되었을 때 설명서를 읽은 것으로 표시되는 것 같습니다.

미리 감사드립니다.


— Macro: AC_CONFIG_COMMANDS (tag..., [cmds], [init-cmds]) 

    Specify additional shell commands to run at the end of config.status, and 
    shell commands to initialize any variables from configure. Associate the 
    commands with tag. Since typically the cmds create a file, tag should 
    naturally be the name of that file. If needed, the directory hosting tag is 
    created. This macro is one of the instantiating macros; see Configuration 
    Actions. 

    Here is an unrealistic example: 

       fubar=42 
       AC_CONFIG_COMMANDS([fubar], 
           [echo this is extra $fubar, and so on.], 
           [fubar=$fubar]) 

— Macro: AC_CONFIG_COMMANDS_PRE (cmds) 

    Execute the cmds right before creating config.status. 

    This macro presents the last opportunity to call AC_SUBST, AC_DEFINE, or 
    AC_CONFIG_FOOS macros. 

— Macro: AC_CONFIG_COMMANDS_POST (cmds) 

    Execute the cmds right after creating config.status. 
+0

'sed' 오류에 관해서는 파이프 기호'|'를 주소의 정규식 구분 기호로 사용하려고하는 것 같습니다. 일반 구분 기호는 슬래시 ('/')입니다. 다른 것을 사용하려면 백 슬래시 앞에'sed -e '\ | S [ "CC"] | d'config.status [...]'를 써야합니다. –

답변

2

내 세 번째 질문은 어떤 시점 config.status이 또는 메이크 그렇게 쓰여진 나는 그것을 고칠 수에서인가?

AC_OUTPUT. config.status은 실제로 instantiate 템플릿 파일이어야합니다. 예를 들어 :

AC_CONFIG_FILES([Makefile]) 
AC_CONFIG_COMMANDS_PRE([echo ---- pre config.status]) 
AC_CONFIG_COMMANDS([tag], [echo ---- at end of config.status]) 
AC_CONFIG_COMMANDS_POST([echo ---- post config.status]) 
AC_OUTPUT 

나는 당신이 당신의 메이크 픽스 업을 수행 할 위치 AC_CONFIG_COMMANDS이 같은

---- pre config.status 
configure: creating ./config.status 
---- post config.status 
config.status: creating Makefile 
config.status: executing depfiles commands 
config.status: executing tag commands 
---- at end of config.status 

그래서 보이는 얻을, 당신이 당신의 config.status이 픽스 업을 수행 할 위치 AC_CONFIG_COMMANDS_POST이다. 이것이 내가 문서화되면서 기대했던 것입니다. 이것은 두 번째 질문에 대해서도 대답해야합니다.

그런 다음이 결과 : [나오지 오류]

보십시오 : 그것은 교체 할 수

AC_CONFIG_COMMANDS_POST([sed -e '/S\[["CC"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status]) 
AC_CONFIG_COMMANDS_POST([sed -e '/S\[["FLAGS"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status]) 
AC_CONFIG_COMMANDS_POST([sed -e '/S\[["ac_ct_CC"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status]) 

당신은, 휴대용 sed 래퍼로 GNU shtool을 고려해 볼 수 있습니다 (그리고 유용하거나 과장 될 수있는 다른 것들이 많이 있습니다.

+0

감사합니다. @ ldav1s. 나는'config.status'가'Makefile'을 생성한다고 생각했다. (나는 John Bollinger가 잠시 뒤 얘기했다). 그렇다면,'Makefile'에'AC_CONFIG_COMMANDS'을 사용하는 것이 잘못된 것 같습니다. 'GNU shtool' 힌트를 보내 주셔서 감사합니다. AIX, OSX 및 Solaris와 같이 우리가 지원하지 않는 덜 인기있는 플랫폼 때문에 사용할 수있을 것이라고 생각하지 않습니다. 이 도구는 사용할 수 없습니다. – jww

+1

'config.status'는 템플릿 파일 (예 : Makefile)을 생성합니다. 'AC_CONFIG_COMMANDS'는 그 끝 부분에서 실행됩니다 (위 참조). 'shtool'의 요지는 사용자가 설치해야하는 것이 아닌 소스 dist의 일부로 쉘 스크립트입니다. 'shtool'은 AIX, Darwin, Solaris를 지원하는 것 같습니다. – ldav1s

+0

그리고 이것은 OP의 첫 번째 질문에도 대부분 답하는 것 같습니다. 'cmd' 인수는 쉘 "리스트"입니다. 또한, 모든 Autoconf 매크로의 모든 * 인수는 대괄호 ('[]')로 묶어서 (Autoconf/m4에) 인용해야합니다. –