在Emperor项目中,在进行树外构建时,让 intltool 工作时遇到了一些问题。当运行make check
out-of-tree 时,这是其中一件事make distcheck
,intltool 会因此失败:
INTLTOOL_EXTRACT="/usr/bin/intltool-extract" XGETTEXT="/usr/bin/xgettext" srcdir=../../po /usr/bin/intltool-update --gettext-package emperor --pot
can't open ../../po/../data/emperor.desktop.in: No such file or directory at /usr/bin/intltool-extract line 212.
intltool 正在源代码树中查找emperor.desktop.in
中列出的。po/POTFILES.in
但是,emperor.desktop.in
它是由名为 的文件的配置脚本生成的emperor.desktop.in.in
,以便插入用户配置的已安装可执行路径,并位于构建树中。
这些是相关的bootstrap.sh
行:
echo +++ Running intltoolize ... &&
intltoolize --force --copy &&
cat >>po/Makefile.in.in <<EOF
../data/_column_names.h:
cd ../data && \$(MAKE) _column_names.h
EOF
中的设置代码configure.ac
:
IT_PROG_INTLTOOL([0.35.0])
GETTEXT_PACKAGE=emperor
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
[The domain to use with gettext])
AM_GLIB_GNU_GETTEXT
data/emperor.desktop.in
列在AC_CONFIG_FILES
.
data/Makefile.am
包含这些行:
desktopdir = $(datadir)/applications
desktop_in_files = emperor.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
并po/POTFILES.in
包含该行
data/emperor.desktop.in
如果您愿意,可以查看公共 git 存储库中的所有详细信息。
我可以以某种方式告诉 intltool 该文件将位于构建树中,而不是源代码树中吗?否则,我的选择似乎是中断make distcheck
(不是一个很好的选择),或者发送一个不包含完整路径并假设可执行文件安装在 PATH 中的桌面文件。(就像凌乱的,恕我直言) - 还有其他选择吗?