使用AC_CONFIG_FILES复制文件

时间:2016-09-01 03:27:06

标签: autoconf

在我的configure.ac文件中,我有:

AC_CONFIG_FILES([Makefile foo/bar.h],
  [mkdir -p ../dir1 && cp foo/bar.h ../dir1]
)

目标是:

  • 从Makefile.in
  • 生成Makefile
  • 从foo / bar.h.in
  • 生成foo / bar.h
  • 将foo / bar.h复制到dir1 / bar.h。

虽然它有效,但我很确定我做错了最后一部分。查看生成的输出,我看到:

  case $ac_file$ac_mode in
    "Makefile":F) mkdir -p ../dir1 && cp foo/bar.h ../dir1
 ;;
    "foo/bar.h":F) mkdir -p ../dir1 && cp foo/bar.h ../dir1
 ;;

  esac

所以看起来它正在为文件列表中的每个文件执行一次'mkdir'命令,这有点多余。它在'case'语句中执行此操作的事实表明,有一些方法可以指定特定于每个文件运行的命令(否则为什么会有'case'?)。

诀窍是什么?

2 个答案:

答案 0 :(得分:1)

如果您不需要在bar.h中保留foo,我认为您可以

AC_CONFIG_FILES([Makefile bar.h:foo/bar.h.in])

来源:https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Configuration-Files.html#Configuration-Files

如果bar.h需要位于两个位置并且链接可以接受,请使用

AC_CONFIG_FILES([Makefile foo/bar.h])
AC_CONFIG_LINKS([bar.h:foo.bar.h])

来源:https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Configuration-Links.html#Configuration-Links

答案 1 :(得分:0)

事实证明我错误地解释了我所看到的内容。

看到'案例'声明让我觉得有一些方法可以指定某些cmds应用于files参数中的特定条目(类似[makefile:stuff1 foo / bar.h:stuff2])。但是(幸运的是)并不是“' case'在那里。

这里的诀窍是,在生成case语句的时候,我们不是只是从AC_CONFIG_FILES files走过这些条目。因此,为了将cmds限制为仅仅AC_CONFIG_FILES条目,它会使用'大小写。'

虽然我的早期尝试建议不支持使用两个AC_CONFIG_FILES,但这也是错误的。

我的解决方案是使用2 AC_CONFIG_FILES。