gpt4 book ai didi

makefile - 使用 make 将消息文件放置在正确的目录结构中

转载 作者:行者123 更新时间:2023-12-04 06:10:23 25 4
gpt4 key购买 nike

我有一个正在添加 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 中以便在设备上安装。

    最佳答案

    我假设您可以使用 GNU make。

    首先,让 make 扩展通配符。这对于以后的后处理很重要:

    MSGSRC=$(wildcard msg/*.po)

    现在您应该获得 MSGSRC 和 MSGOBJ 中的文件名列表。此外,make 手册将 $(F) 标记为已过时,并且 $(名称的词干)应仅包含语言环境。所以,
    mkdir -p $(TARGET_BUILD_PATH)/$(target)/msg/$*/LC_MESSAGES

    应该可以很好地解决问题,cp 规则也是如此。

    关于makefile - 使用 make 将消息文件放置在正确的目录结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852932/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com