2010-07-30 11 views
33

Il manuale di Autoconfig stabilisce che le righe di commento possono iniziare con dnl o #.Autoconf: dnl vs. #

C'è qualche differenza tra loro, qualche motivo per usare l'uno piuttosto che l'altro in qualsiasi circostanza? O è puramente una questione di gusti?

risposta

48

In configure.ac, le righe hanno commentato con '#' che si verificano dopo che AC_INIT apparirà nello script di configurazione risultante. i commenti di DN non lo faranno. Uno degli scopi di dnl è quello di scartare i newline indesiderati nel tentativo di rendere leggibile lo script di configurazione. Inoltre, è opportuno usare i commenti dnl per documentare una macro m4; questi commenti non hanno senso nello script configure, dal momento che la macro m4 non appare lì, solo la sua espansione.

I commenti in Makefile.am sono trattati in modo diverso. Makefile.am non viene elaborato da m4, ma da automake, dove la convenzione è di scartare le righe che iniziano con ## precedute solo da spazi bianchi. (Anche se ### commenti portano a Makefile.in) Poiché Makefile.am non viene elaborato da m4, 'dnl' non introduce un commento.

+32

dnl sta per "Discard to Next Line" se sei come me e devi sapere – JeffCharter

+0

@JeffCharter: We, the Acronym Challenged, ti saluto! –

11

dnl è una macro m4 che elimina tutti gli input che la seguono sulla stessa riga (inclusa la nuova riga). # non significa nulla in m4, quindi finisce nel target (Makefile?), Nel quale agisce come un commento.

Quindi la differenza chiave è che dnl è un commento nella fonte originale, mentre # diventa un commento nel file generato.

+0

Ehm ... non proprio, mi sembra dopo alcuni test. 1) Mi riferivo a configure.in (e alla sua configurazione di destinazione). 2) I commenti "#" in configure.in non compaiono in configure. 3) I commenti "#" in Makefile.am * do * compaiono nel Makefile. 4) le linee 'dnl' in Makefile.am * do * appaiono nel Makefile. 5) I commenti "##" in Makefile.am, d'altra parte, * not * non appaiono nel Makefile. – DevSolar

+3

Questo è un buon esempio del perché il nome 'configure.in' è stato deprecato a favore di 'configure.ac'. autoconf tratta configure.ac in modo diverso dai tipici file di input * .in. configure.ac è analizzato da m4, ma Makefile.am non lo è, né i file di input usati da configure per generare target. Quindi dnl è solo un commento in configure.ac o in macro m4 definite in aclocal.m4, acinclude.m4 o altrove. –

Problemi correlati