2010-02-22 12 views
7

Il seguente codice dal mio file configuration.ac non funziona (si noti le parentesi quadre annidate con [default = no]):Come faccio a uscire dal testo in autoconf/m4?

AC_ARG_ENABLE(debug, 
    [ --enable-debug   build with debugging support [default=no].], 
    [DEBUG="$enableval"], 
    [DEBUG="no"] 
) 

Come posso sfuggire a queste staffe?

+0

Non vedo nessun Bash. Perché il tag? –

+2

Gli script di Autoconf vengono analizzati prima da m4 e poi dalla shell di bourne. – user278429

risposta

0

utilizzare AC_HELP_STRING

+0

Grazie (che è decisamente più pulito) ma ancora lo stesso problema. In << AS_HELP_STRING ([- enable-debug], [build con supporto per il debug [default = no].]) >> i "[" e "]" mancano dall'output. – user278429

+2

Perché l'insistenza su parentesi quadre nell'output? Usa le parentesi; ti semplifica la vita –

+0

Per coerenza, perché gli altri pacchetti che uso hanno parentesi quadre nel loro output :( – user278429

16

Trovato! Dal tutorial this:

Gli argomenti M4 sono citati con [e]. Non c'è alcun modo per sfuggire a questi, tuttavia, si hanno diverse opzioni se si desidera inserire [s] o:

  1. Utilizzare un "Quadrigaph". @ <: @ ti dà [e @:> @ ti dà].
  2. Bilancia le tue quotazioni. M4 trasformerà [[]] in []. Attenzione a usare questo argomento per i macro. A volte, è necessario raddoppiare anche le quote ([[[]]]).
  3. Modificare il preventivo utilizzando: changequote (< <, >>) per modificare il preventivo su < < e >>. La documentazione di autoconf (giustamente, secondo me) mette in guardia contro l'uso (eccessivo) di questo, poiché può portare a risultati imprevisti.
  4. Evitare [e] dove mai possibile. Questa è la mia scelta personale.

mio nuovo codice è quindi:

AC_ARG_ENABLE(debug, 
    AS_HELP_STRING(
     [--enable-debug], 
     [build with debugging symbols @<:@[email protected]:>@]), 
    [enable_debug="$enableval"], 
    [enable_debug="no"] 
) 
+0

Dovresti impostare la tua risposta come risposta allora –

7

Brackets sono tipo di caratteri di escape, così come si fa per '\', si può fuggire parentesi [] con staffe, ad esempio:

AC_ARG_ENABLE (debug, [- build debable-debug con supporto per il debug [ [default ult = no] ]], [DEBUG = "$ enableval"], [DEBUG = "no"] )

Nota:. [ [] default = no [] ] potrebbe non funzionare come previsto, mentre m4 dovrebbe cercare l'end_bracket dalla fine. Dovrebbe essere esteso a [ ]default=no[ ].

+0

Meglio usare gli escape "quadrigraph", @<:@ and @>: @. – ptomato

Problemi correlati