You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Make规则,解决GTK项目无法生成.ui文件的报错?

问题分析与Makefile修正

问题根源

  1. 路径不匹配:你定义的COMPILED_BP变量指向当前目录下的.ui文件,但实际编译后的.ui会生成到$(COMPILED_BP_DIR)目录中,导致gresource目标依赖的文件路径不存在,Make无法找到对应的构建规则。
  2. 规则路径错误:原%.ui: %.bp规则假设.bp源文件在当前目录、生成的.ui也在当前目录,但实际源文件在$(BP_SOURCE_DIR),目标文件需要放到$(COMPILED_BP_DIR),规则的路径匹配完全错误。

修正后的Makefile

BP_SOURCE_DIR = mpyd-ui/bp
GRESOURCE_DIR = org/navi/mpyd
GRESOURCE_FILE = mpyd.gresource.xml
GRESOURCE_PREFIX = /org/navi/mpyd

COMPILED_BP_DIR = $(GRESOURCE_DIR)/templates
GRESOURCE   = $(subst .xml,,$(GRESOURCE_FILE))
# 保留源文件完整路径,避免丢失位置信息
BP_SOURCES  = $(shell find $(BP_SOURCE_DIR) -name '*.bp')
# 生成目标文件的完整路径:COMPILED_BP_DIR/xxx.ui
COMPILED_BP = $(patsubst $(BP_SOURCE_DIR)/%.bp,$(COMPILED_BP_DIR)/%.ui,$(BP_SOURCES))

gresource: $(COMPILED_BP)
    python3 generate_g_resources.py                 \
        $(GRESOURCE_FILE)                           \
        $(GRESOURCE_DIR)                            \
        $(GRESOURCE_PREFIX)                         \
        $(notdir $(COMPILED_BP))  # 传递文件名即可,可根据脚本需求调整

# 明确源文件与目标文件的目录位置,正确匹配构建规则
$(COMPILED_BP_DIR)/%.ui: $(BP_SOURCE_DIR)/%.bp
    blueprint-compiler compile --output $@ $<

.PHONY: all
all: dirs gresource

.PHONY: clean
clean:
    rm -r $(GRESOURCE_DIR)  ||:
    rm $(GRESOURCE_FILE)    ||:
    rm $(GRESOURCE)         ||:

.PHONY: dirs
dirs:
    mkdir -p $(GRESOURCE_DIR)
    mkdir -p $(COMPILED_BP_DIR)

关键修改说明

  • 修正目标文件路径:用patsubst将源文件路径替换为目标文件路径,让COMPILED_BP指向实际要生成的.ui文件位置,确保Make能识别需要构建的对象。
  • 重构构建规则:将规则改为$(COMPILED_BP_DIR)/%.ui: $(BP_SOURCE_DIR)/%.bp,明确源文件和目标文件的目录,让Make能正确匹配并执行编译命令。
  • 使用自动变量:用$@(目标文件)和$<(第一个依赖文件)简化编译命令,避免硬编码路径,提升规则通用性。
  • 保留源文件完整路径:移除notdir,让BP_SOURCES保留源文件的完整路径,确保路径替换逻辑正确。

内容的提问来源于stack exchange,提问作者PortableNavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:45:35