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

如何配置Meson仅在重建目标X后打印指定消息?

在Meson中仅重建固件后打印大小的配置方法

要实现仅当固件目标X被重建时才打印其大小,核心是让打印操作仅依赖于固件文件的更新,避免每次构建都执行。以下是两种实用方案:

方案1:将打印整合到固件构建目标

直接把打印命令追加到固件构建的命令链中,这样只有当固件实际被重建(输出文件更新)时,才会执行整个命令流程,自然触发打印。

示例代码:

# 定义你的固件构建目标
firmware = custom_target('my_firmware',
  input: 'src/main.c',          # 替换为你的固件源文件路径
  output: 'firmware.bin',       # 替换为实际的固件输出文件名
  command: [
    # 第一步:执行固件构建命令(替换为你的实际构建工具)
    'arm-none-eabi-gcc', '-o', '@OUTPUT@', '@INPUT@',
    # 第二步:构建成功后打印大小(Linux/macOS示例,可按需调整)
    '&&',
    find_program('sh'), '-c', 'echo "固件大小:$(du -h @OUTPUT@)"'
  ],
)

这种方式无需额外目标,逻辑紧凑,只有固件真的被重新生成时才会打印。

方案2:创建独立的依赖打印目标

如果希望构建和打印操作分离,可创建一个独立的custom_target,让它依赖固件输出文件,仅当固件更新时才执行打印。

示例代码:

# 先定义固件构建目标
firmware = custom_target('my_firmware',
  input: 'src/main.c',
  output: 'firmware.bin',
  command: ['arm-none-eabi-gcc', '-o', '@OUTPUT@', '@INPUT@'],
)

# 创建打印大小的目标,依赖固件文件
print_firmware_size = custom_target('print_firmware_size',
  input: firmware,
  output: '.size_printed',  # 生成空标记文件,用于判断是否需要重新执行
  command: [
    find_program('sh'), '-c',
    'echo "固件大小:$(stat -c "%s 字节" @INPUT@)" && touch @OUTPUT@'
  ],
  build_by_default: true,  # 确保默认构建时会触发这个目标
)

这里的.size_printed是一个标记文件,Meson会对比它和固件的修改时间:只有固件更新时,才会重新执行打印命令并更新标记文件。

适配不同系统的打印命令

  • Linux/macOS:用du -h显示易读大小,stat -c "%s"显示字节数。
  • Windows:可改用PowerShell命令,比如powershell -c "Write-Host '固件大小:' (Get-Item @INPUT@).Length '字节'"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:50:34