“.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 层。
buildconf.py.am.in
文件不是生成的,而是手写的;
buildconf.py.am
在 AC_CONFIG_FILES
中声明(怎么可能?它应该告诉 "there must be a buildconf.py.am.in.am
next to it, which will be used to generate a buildconf.py.am.in.in
to then make a "buildoncf.py.am.in
文件......但我们想要并得到是 buildconf.py
);
- 运行
configure
生成 buildconf.py.am
,设置变量是两个布尔值,告诉是否提供 mongoDB 和 web UI 插件;
make
生成最终的 buildconf.py
,将被导入到需要它包含的常量的地方。这是在此时完成的,因为它需要 - 我猜 - 在配置步骤中扩展的变量。
我认为这可能只是一个命名问题。
通常 .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
简单地说,我 运行 在我们正在开发的项目中的一个 "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 层。
buildconf.py.am.in
文件不是生成的,而是手写的;buildconf.py.am
在AC_CONFIG_FILES
中声明(怎么可能?它应该告诉 "there must be abuildconf.py.am.in.am
next to it, which will be used to generate abuildconf.py.am.in.in
to then make a "buildoncf.py.am.in
文件......但我们想要并得到是buildconf.py
);- 运行
configure
生成buildconf.py.am
,设置变量是两个布尔值,告诉是否提供 mongoDB 和 web UI 插件; make
生成最终的buildconf.py
,将被导入到需要它包含的常量的地方。这是在此时完成的,因为它需要 - 我猜 - 在配置步骤中扩展的变量。
我认为这可能只是一个命名问题。
通常 .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