首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autoconf: dnl与#

Autoconf: dnl与#
EN

Stack Overflow用户
提问于 2010-07-30 20:07:40
回答 3查看 13.4K关注 0票数 44

自动配置手册指出,注释行可以以dnl#开头。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-31 18:29:51

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

Makefile.am中的注释以不同的方式处理。Makefile.am不是由m4处理的,而是由automake处理的,automake的约定是丢弃以##开头且前面只有空格的行。(尽管###注释传递到Makefile.in)因为Makefile.am不是由m4处理的,所以'dnl‘不引入注释。

票数 61
EN

Stack Overflow用户

发布于 2010-07-30 20:12:05

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

因此,关键的区别在于dnl是原始源文件中的注释,而#则成为生成的文件中的注释。

票数 14
EN

Stack Overflow用户

发布于 2021-11-02 09:16:34

正如其他人所指出的:对于configure.ac中的所有内容,即configure.ac文件的“注释”,使用dnl;对于要进入结果配置脚本的所有内容,则使用#。这里有一件很重要的事情:dnl阻止所有的解析(唯一的例外是dnl(,可以在下面的例子中看到:

代码语言:javascript
复制
# 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文档。

代码语言:javascript
复制
dnl CHECKME: possibly drop AM_PROG_AR + build_aux/ar-lib
AM_PROG_AR
LT_INIT([dlopen win32-dll])

效果很好。

学到的教训:永远不要在#之后使用宏(对于使用最终配置脚本的用户来说,这在任何情况下都没有意义),并且在大多数情况下在configure.ac中使用dnl。另请参阅Comments in m4 input

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3371239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档