Linux Shell中`{} +`语法对应的Windows批处理等效实现方法
解决方案
你可以先把所有匹配到的.o文件路径拼接为一个变量,再一次性传入rgblink执行,实现和Linux下find -exec {} +完全一致的效果,完整批处理代码如下:
@echo off setlocal enabledelayedexpansion :: 初始化存储.o文件路径的变量 set "OBJ_FILES=" :: 递归遍历bin-int目录下所有.o文件,拼接路径到变量 for /r ".\bin-int" %%i in (*.o) do ( set "OBJ_FILES=!OBJ_FILES! "%%i"" ) :: 一次性执行链接命令,所有.o文件会作为整体传入 rgblink -o ./bin/lapis.gb -n ./bin-int/symbols.sym !OBJ_FILES! endlocal
关键说明
- 必须开启
enabledelayedexpansion延迟变量扩展:批处理默认会在代码块执行前预解析所有变量,不开延迟扩展会导致循环内拼接的变量无法实时更新,最终只能拿到最后一个文件路径 - 每个路径外层包裹双引号:避免路径包含空格、特殊符号时命令执行出错
- 如果是直接在CMD窗口手动执行而非写
.bat脚本,需要把代码里的%%i替换为%i - 单条CMD命令默认有8191字符的长度限制,如果你的项目
.o文件数量极多超出该限制,可以先把所有.o路径写入临时文本文件,再通过rgblink支持的参数文件读取方式调用即可。
内容的提问来源于stack exchange,提问作者Type Definition
相关产品推荐
相关产品推荐

