Autoconf手册讨论AC_CONFIG_COMMANDS_PRE和AC_CONFIG_COMMANDS_PRE宏(如下所示)。
当我按以下相对顺序使用宏时,不应用它们:
## configure.ac
...
AC_OUTPUT(Makefile)
AC_CONFIG_COMMANDS_POST(cmd)
AC_CONFIG_COMMANDS_POST(cmd)
AC_CONFIG_COMMANDS_POST(cmd)当我改变相对顺序时:
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)然后它的结果是:
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_OUTPUT、AC_CONFIG_COMMANDS_PRE和AC_CONFIG_COMMANDS_POST的相对顺序是什么?
我的第三个问题是,在什么时候编写config.status或Makefile才能修复它?
手册3.1.3标准configure.ac布局中也有一节,但是它没有讨论AC_OUTPUT、AC_CONFIG_COMMANDS_PRE和AC_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。
发布于 2017-11-02 14:59:03
我的第三个问题是,在什么时候编写config.status或Makefile才能修复它?
AC_OUTPUT。config.status实际上应该是实例化模板文件。例如:
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我得到了
---- 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错误。
尝试:
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包装器,因为它可以进行替换(以及其他一些您可能发现有用的东西(或过度使用))。
https://stackoverflow.com/questions/47070798
复制相似问题