GNU Make 4.3(MinGW版)wildcard函数出现文件名截断/丢失问题
问题成因
这是i686-w64-mingw32平台编译的GNU Make 4.3版本的已知原生bug,问题出在该版本底层实现wildcard函数依赖的glob通配符匹配模块,mingw移植时的文件名解析逻辑存在边界错误,处理带前缀的.c文件名时会错误截断前缀字符,最终返回异常的短文件名结果,甚至出现文件重复、丢失的情况。
解决方法
- 方案1:升级GNU Make版本
直接更换为4.4及以上版本的mingw编译GNU Make,该bug在后续版本中已经被官方修复,替换二进制文件即可正常使用wildcard功能。 - 方案2:降级GNU Make版本
回退到GNU Make 4.2.1的mingw编译版本,该版本不存在glob模块的匹配错误问题。 - 方案3:临时规避(无需更换Make版本)
放弃使用wildcard函数,改用调用shell命令的方式获取.c文件列表,适配不同环境的写法参考:# 原生Windows cmd环境适配 SRC_C = $(shell dir /b *.c 2>nul) # MSYS/Cygwin环境适配 SRC_C = $(shell ls *.c 2>/dev/null)
内容的提问来源于stack exchange,提问作者Mars Jurich
相关产品推荐
相关产品推荐

