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

如何在每次CMake构建时运行Python脚本生成.qrc文件?

搞定CMake每次构建自动运行Python脚本生成.qrc的问题

我明白你的痛点——CMAKE_AUTORCC ON在添加或修改资源时会失效,所以得靠Python脚本手动生成.qrc,但之前的方法没法做到每次构建都触发脚本执行。下面给你两个靠谱的解决方案,亲测有效:

方案1:伪依赖触发法

核心思路是用一个“永远需要更新”的伪文件,让CMake每次都觉得必须重新运行脚本:

# 先找好Python解释器,确保能调用到脚本
find_package(Python REQUIRED COMPONENTS Interpreter)

# 定义一个伪依赖文件,用来触发每次构建
set(QRC_TRIGGER_FILE ${CMAKE_CURRENT_BINARY_DIR}/.qrc_build_trigger)

# 添加自定义命令:每次构建都跑Python脚本生成.qrc
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/your_qrc_generator.py --output ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
    COMMAND ${CMAKE_COMMAND} -E touch ${QRC_TRIGGER_FILE}  # 每次运行后更新伪文件时间戳
    DEPENDS ${QRC_TRIGGER_FILE}  # 依赖这个伪文件,所以每次构建都会触发
    COMMENT "正在运行Python脚本生成.qrc文件..."
)

# 把生成的.qrc加到你的项目目标里
add_executable(YourAppTarget
    # 你的其他源文件...
    ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
)

方案2:自定义目标依赖法

这种方式更直观,创建一个默认构建的自定义目标,让你的主程序目标依赖它:

find_package(Python REQUIRED COMPONENTS Interpreter)

# 创建一个ALL目标(默认构建时会自动执行)
add_custom_target(GenerateQRCFile ALL
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/your_qrc_generator.py --output ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
    COMMENT "生成.qrc资源文件中..."
)

# 让你的主程序目标依赖这个自定义目标,确保构建前先跑脚本
add_executable(YourAppTarget
    # 其他源文件...
    ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
)
add_dependencies(YourAppTarget GenerateQRCFile)

额外小贴士

  • 如果你的脚本需要依赖特定资源文件(比如图片、翻译文件),可以把这些文件加到add_custom_command的DEPENDS列表里,这样不仅每次构建会跑,当资源文件变动时也会重新生成.qrc:
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
        COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/your_qrc_generator.py --output ${CMAKE_CURRENT_BINARY_DIR}/auto_generated.qrc
        DEPENDS
            ${CMAKE_CURRENT_SOURCE_DIR}/your_qrc_generator.py
            ${CMAKE_CURRENT_SOURCE_DIR}/res/*.png
            ${CMAKE_CURRENT_SOURCE_DIR}/res/*.qm
        COMMENT "更新资源文件并生成.qrc..."
    )
    
  • 记得把your_qrc_generator.py换成你实际的脚本路径,auto_generated.qrc换成生成的文件名,YourAppTarget换成你的项目目标名。

这两种方法都能保证每次构建都会执行你的Python脚本,完美解决AUTORCC失效的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:01:22