2010-07-30 11 views
33

El manual de Autoconfig indica que las líneas de comentario pueden comenzar con dnl o #.Autoconf: dnl vs. #

¿Hay alguna diferencia entre ellos, alguna razón para usar uno en lugar de otro en cualquier circunstancia? ¿O es puramente una cuestión de gusto?

Respuesta

48

En configure.ac, las líneas comentadas con '#' que aparecen después de que AC_INIT aparecerá en el script de configuración resultante. dnl comentarios no. Uno de los propósitos de dnl es descartar líneas nuevas no deseadas en un esfuerzo por hacer que el script configure sea legible. Además, es apropiado usar comentarios dnl para documentar una macro m4; esos comentarios no tienen sentido en el script de configuración, ya que la macro m4 no aparece allí, solo su expansión.

Los comentarios en Makefile.am se tratan de manera diferente. Makefile.am no es procesado por m4, sino por automake, donde la convención es descartar líneas que comienzan con ## precedidas únicamente por espacios en blanco. (Aunque ### comentarios llevan a Makefile.in) Como Makefile.am no es procesado por m4, 'dnl' no introduce un comentario.

+32

dnl significa "Descartar a la siguiente línea" en caso de que sea como yo y debe saber – JeffCharter

+0

@JeffCharter: ¡Nosotros, el acrónimo Desafiado, le saludamos! –

11

dnl es una macro m4 que descarta todas las entradas que le siguen en la misma línea (incluida la nueva línea). # no significa nada en m4, por lo que termina en el destino (Makefile?), En el que actúa como un comentario.

Por lo tanto, la diferencia clave es que dnl es un comentario en la fuente original, mientras que # se convierte en un comentario en el archivo generado.

+0

Erm ... no del todo, me parece después de algunas pruebas. 1) Me refería a configure.in (y su configuración de destino). 2) Los comentarios '#' en configure.in no aparecen en configure. 3) Los comentarios '#' en Makefile.am * do * aparecen en el Makefile. 4) las líneas 'dnl' en Makefile.am * do * aparecen en el Makefile. 5) '##' comentarios en Makefile.am, por otro lado, do * not * aparecen en el Makefile. – DevSolar

+3

Este es un buen ejemplo de por qué el nombre 'configure.in' quedó en desuso en favor de 'configure.ac'. autoconf trata configure.ac de forma diferente que los archivos de entrada * .in típicos. configure.ac es analizado por m4, pero Makefile.am no lo es, ni los archivos de entrada utilizados por configure para generar objetivos. Por lo tanto, dnl es solo un comentario en configure.ac o en macros m4 definidas en aclocal.m4, acinclude.m4 o en otro lugar. –

Cuestiones relacionadas