在我的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'?)。
诀窍是什么?
答案 0 :(得分:1)
如果您不需要在bar.h
中保留foo
,我认为您可以
AC_CONFIG_FILES([Makefile bar.h:foo/bar.h.in])
如果bar.h需要位于两个位置并且链接可以接受,请使用
AC_CONFIG_FILES([Makefile foo/bar.h])
AC_CONFIG_LINKS([bar.h:foo.bar.h])
答案 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。