如何配置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
相关产品推荐
相关产品推荐

