Autoconfig手册中指出,注释行可以以dnl
或#
开头。
它们之间有什么区别吗?在任何情况下使用其中之一有任何理由吗?还是纯粹是个人口味的问题?
Autoconfig手册中指出,注释行可以以dnl
或#
开头。
它们之间有什么区别吗?在任何情况下使用其中之一有任何理由吗?还是纯粹是个人口味的问题?
dnl
是 m4 宏语言中的一种宏,它会忽略同一行(包括换行符)后面的所有输入内容。在 m4 中,#
没有任何意义,因此它出现在目标文件(例如 Makefile)中时起到了注释的作用。
因此,关键区别���于 dnl
在原始源代码中是注释,而在生成的文件中 #
成为了注释。
dnl
}},而对于您打算放入生成的configure脚本中的所有内容,请使用#
。
这里有一件重要的事情:dnl
防止所有解析(唯一的例外是dnl(
,可以在以下示例中看到:# CHECKME: possibly drop AM_PROG_AR + build_aux/ar-lib
AM_PROG_AR
LT_INIT([dlopen win32-dll])
通过 autoconf
处理导致
可能未定义的宏:AM_PROG_AR 如果这个标记和其他标记是合法的,请使用 m4_pattern_allow。 请参阅 Autoconf 文档。
但是
dnl CHECKME: possibly drop AM_PROG_AR + build_aux/ar-lib
AM_PROG_AR
LT_INIT([dlopen win32-dll])
运行正常...
教训:在 #
之后永远不要使用宏(在任何情况下都不会对最终配置脚本的用户有意义),并且在 configure.ac 中 大多数情况下 使用 dnl
。
还请参见 m4
输入中的注释。