“.am.in”?写“.in”而不生成它可以吗?

".am.in" ? Is it okay to write ".in" without generating it?

简单地说,我 运行 在我们正在开发的项目中的一个 "buildconf.py.am.in" 文件上。不是真正的 autotools 专家(我必须为这份工作学习它们),这对我来说似乎很 st运行ge。里面有两个 VAR=@VAR@ 和两个 VAR=[@]VAR[@].

怎么会有“.am.in”?对我来说,这意味着我们编写一个 .in 来生成一个 .am,该 .am 将用于生成另一个 .in(或 .py,也许)。它看起来是 "legit" 还是应该是 "fixed" ?因此,在 configure 步骤之后,我确实有一个 "buildconf.py.am",它在 make 过程中用于生成 .py。它包含以下内容:

do_subst = sed  -e 's,\[@\]APP_VARDIR\[@\],$(localstatedir)/app/,g' \
    -e 's,\[@\]APP_LOGDIR\[@\],$(logdir),g'

buildconf.py: buildconf.py.am
    $(do_subst) < $(srcdir)/buildconf.py.am > buildconf.py

是"normal"还是"acceptable"?当我试图整合整个事情时,因为一切都变得 "tricky" 并且难以更新,它看起来像是对我来说大量的修复之一。

TY !

编辑:

该脚本主要定义 "plugins" 使用的文件夹路径,因此需要诸如数据目录或软件安装目录之类的东西。它还定义了这些插件要使用的文件夹结构,以便它们可以被所谓的插件的 python 代码导入。此外,那些 "plugins" 实际上是应用程序的 server/routing 层。

我认为这可能只是一个命名问题。

通常 .am 文件被 Makefile.am 包含并被 automake 扩展,例如它们通常有 per-directory 在保持整体构建的同时定义源和目标 non-recursive。

可以 包含 Makefile 级别的文件,以便由 make 执行包含,但称它们为 .am 听起来这样就错了。

但在这种情况下,这两者都不是,这可能更应该称为 .in.in(有一些脚本可以做类似的事情),但感觉有点过头了。通过在 make 阶段应用所有替换,进行一次处理可能具有相同的意义。

我想最有可能的情况是原始扩展不知何故不正确并且分层,但不知道代码库很难说。

看起来像 three-step 自定义模板,例如在 Unity 单声道中。 模板首先由 autogen.sh 处理:.am.in -> .am,然后由 automake .am -> .in,最后由 configure 脚本 Makefile.in -> Makefile.

autogen.sh 中是:

if test x$has_ext_mod = xtrue; then
       cat mono/mini/Makefile.am.in ../mono-extensions/mono/mini/Makefile.am > mono/mini/Makefile.am
else
       cat mono/mini/Makefile.am.in > mono/mini/Makefile.am
fi