【发布时间】:2011-12-12 18:26:01
【问题描述】:
我有一个正在添加 gettext 支持的现有项目。不幸的是,由于项目的结构和限制,我无法通过推荐的将项目更改为 automake 的路线。同样不幸的是,我的 make-fu 很弱,我在执行规则来构建我的输出存档时遇到了麻烦:
- 获取 msg 子目录中的所有 .po 文件并对其运行 msgfmt 以生成 .mo 文件(在我的目标目录中)
- 将 .po 文件放在 gettext 期望的目录结构中:(dir)/(locale)/LC_MESSAGES/(domainname).mo
这是我目前所拥有的
MSGSRC=msg/*.po
MSGOBJ=$(addprefix $(TARGET_BUILD_PATH)/$(target)/,$(MSG_SRC:.po=.mo))
$(TARGET_BUILD_PATH)/$(target)/msg/%.mo: msg/%.po
msgfmt -c $< -o $@
# Put in correct place
mkdir -p $(TARGET_BUILD_PATH)/$(target)/msg/$(*F)/LC_MESSAGES
cp $@ $(TARGET_BUILD_PATH)/$(target)/msg/$(*F)/LC_MESSAGES/myapp.mo
archive: $(MSGOBJ) (other objs....)
(make the archive tarball...)
现有代码的问题在于,由于某种原因,$(*F) 只出现了 * 而不是语言环境名称(.po 文件被命名为 en_US.po 等)。这似乎也不正确,因为目标应该是真正的目标,而不是我拥有的 hacky msgfmt 和副本。目录结构很重要,因为 makefile 会针对不同的交叉编译 ($(target)) 运行几次,并且输出会归档到 tarball 中以便在设备上安装。
【问题讨论】: