使用 AC_CONFIG_FILES 复制文件

Using AC_CONFIG_FILES to copy a file

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

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

目标是:

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

  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'?)。

有什么诀窍?

如果您不需要将 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 需要在两个位置并且 link 是可以接受的,请使用

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

原来我误解了我所看到的。

看到 'case' 语句让我觉得有一些方法可以指定某些 cmds 应用于 files 参数中的特定条目(类似于 [makefile:stuff1 foo/bar.h:stuff2])。但是(谢天谢地)这不是 'case' 在那里的原因。

这里的技巧是,在生成 case 语句时,我们 不是 只是遍历 AC_CONFIG_FILES files 中的条目。因此,为了将 cmds 限制为仅 AC_CONFIG_FILES 个条目,它使用 'case.'

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

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