Autoconf:dnl vs.#

Dev*_*lar 38 autoconf

Autoconfig手册指出注释行可以以dnl或开头#.

他们之间有什么区别,在任何情况下使用一个而不是另一个的理由是什么?或者纯粹是品味问题?

Wil*_*ell 53

在configure.ac中,在AC_INIT之后出现的带有"#"的行将出现在生成的配置脚本中.dnl评论不会.dnl的一个目的是丢弃不需要的换行符,以使配置脚本可读.另外,使用dnl注释来记录m4宏是合适的.这些注释在配置脚本中没有任何意义,因为m4宏不会出现在那里,只有它的扩展.

Makefile.am中的注释区别对待.Makefile.am不是由m4处理的,而是由automake处理的,其中约定是丢弃以##开头的行仅由空格开头.(虽然###注释传递给Makefile.in)由于Makefile.am不是由m4处理的,因此'dnl'不会引入注释.

  • dnl代表"丢弃到下一行",以​​防你像我一样,必须知道 (43认同)
  • @JeffCharter:我们,首字母缩略词受到挑战,向您致敬! (4认同)

Mar*_*tos 14

dnl是一个m4宏,它丢弃在同一行(包括换行符)后跟随它的所有输入.#在m4中没有任何意义,所以它最终出现在目标(Makefile?)中,在其中它充当注释.

所以关键的区别在于它dnl是原始源中#的注释,而在生成的文件中成为注释.

  • 这是为什么名称'configure.in'被弃用而不是'configure.ac'的一个很好的例子.autoconf以与典型的*.in输入文件不同的方式处理configure.ac. configure.ac由m4解析,但Makefile.am不是,configure也没有使用输入文件来生成目标.所以dnl只是configure.ac中的注释或aclocal.m4,acinclude.m4或其他地方定义的m4宏中的注释. (5认同)