首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AC_CONFIG_COMMANDS_PRE和AC_CONFIG_COMMANDS_POST?

如何使用AC_CONFIG_COMMANDS_PRE和AC_CONFIG_COMMANDS_POST?
EN

Stack Overflow用户
提问于 2017-11-02 08:35:56
回答 1查看 500关注 0票数 0

Autoconf手册讨论AC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_PRE宏(如下所示)。

当我按以下相对顺序使用宏时,不应用它们:

代码语言:javascript
复制
## configure.ac
...

AC_OUTPUT(Makefile)
AC_CONFIG_COMMANDS_POST(cmd)
AC_CONFIG_COMMANDS_POST(cmd)
AC_CONFIG_COMMANDS_POST(cmd)

当我改变相对顺序时:

代码语言:javascript
复制
AC_CONFIG_COMMANDS_POST([sed -e '|S["CC"]|d' config.status > config.status.xxx; mv config.status.xxx config.status])
AC_CONFIG_COMMANDS_POST([sed -e '|S["FLAGS"]|d' config.status > config.status.xxx; mv config.status.xxx config.status])
AC_CONFIG_COMMANDS_POST([sed -e '|S["ac_ct_CC"]|d' config.status > config.status.xxx; mv config.status.xxx config.status])
AC_OUTPUT(Makefile)

然后它的结果是:

代码语言:javascript
复制
configure: creating ./config.status
sed: -e expression #1, char 1: unknown command: `|'
sed: -e expression #1, char 1: unknown command: `|'
sed: -e expression #1, char 1: unknown command: `|'

我的第一个问题是,cmd的格式是什么?是否应该像[]一样将其封装在括号中( AC_CONFIG_COMMANDS )?还是它还需要别的东西?

我的第二个问题是,宏AC_OUTPUTAC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_POST的相对顺序是什么?

我的第三个问题是,在什么时候编写config.statusMakefile才能修复它?

手册3.1.3标准configure.ac布局中也有一节,但是它没有讨论AC_OUTPUTAC_CONFIG_COMMANDS_PREAC_CONFIG_COMMANDS_POST的相对顺序。

我更喜欢修复Makefile,但我对手册的阅读似乎表明,我们是在config.status准备就绪时被调用的,而不是在Makefile准备就绪时调用的。

提前谢谢。

宏: AC_CONFIG_COMMANDS (标记.、cmds、init-cmds)指定要在config.status末尾运行的附加shell命令,并指定shell命令来初始化配置中的任何变量。将命令与标记相关联。由于cmds通常创建一个文件,因此标记自然应该是该文件的名称。如果需要,将创建目录宿主标记。此宏是实例化宏之一;请参见配置操作。下面是一个不现实的例子: fubar=42 AC_CONFIG_COMMANDS(fubar,echo这是额外的$fubar等等)- Macro: AC_CONFIG_COMMANDS_PRE ( cmds )在创建config.status之前执行cmds。此宏提供了最后一次调用AC_SUBST、AC_DEFINE或AC_CONFIG_FOOS宏的机会。宏: AC_CONFIG_COMMANDS_POST ( cmds )在创建config.status后立即执行cmds。

EN

回答 1

Stack Overflow用户

发布于 2017-11-02 14:59:03

我的第三个问题是,在什么时候编写config.status或Makefile才能修复它?

AC_OUTPUTconfig.status实际上应该是实例化模板文件。例如:

代码语言:javascript
复制
AC_CONFIG_FILES([Makefile])
AC_CONFIG_COMMANDS_PRE([echo ---- pre config.status])
AC_CONFIG_COMMANDS([tag], [echo ---- at end of config.status])
AC_CONFIG_COMMANDS_POST([echo ---- post config.status])
AC_OUTPUT

我得到了

代码语言:javascript
复制
---- pre config.status
configure: creating ./config.status
---- post config.status
config.status: creating Makefile
config.status: executing depfiles commands
config.status: executing tag commands
---- at end of config.status

因此,看起来AC_CONFIG_COMMANDS是您想要执行Makefile修复的地方,而AC_CONFIG_COMMANDS_POST是您想要执行config.status修复的地方。鉴于这些文件,这正是我所期待的。这也会回答你的第二个问题。

然后导致: sed错误。

尝试:

代码语言:javascript
复制
AC_CONFIG_COMMANDS_POST([sed -e '/S\[["CC"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status])
AC_CONFIG_COMMANDS_POST([sed -e '/S\[["FLAGS"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status])
AC_CONFIG_COMMANDS_POST([sed -e '/S\[["ac_ct_CC"\]]/d' config.status > config.status.xxx; mv config.status.xxx config.status])

您可能会认为GNU工具是一个可移植的sed包装器,因为它可以进行替换(以及其他一些您可能发现有用的东西(或过度使用))。

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

https://stackoverflow.com/questions/47070798

复制
相关文章

相似问题

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