1. 背景
折腾Windows的自动化编译,坑有点多,后面搞了Incredibuild并行编译,也遇到了类似的坑。
环境:
Qt5.8.0 + vs2015
Qt5.15.8 + vs2019
之前遇到的问题,包括2015和2019都有这种问题,现象就是本地编译正常,用qtcreator编译没有问题,用vs编译也没有问题,但是用 bat脚本编译就是不通过。
报错也是看不懂,用2019的版本编译的报错如下:
vs2019 error msb8020 the build tools for v141 vs2017
vs2105的报错也是看不懂,不知道vs编译器是怎么做的,还有王法么。。。
2. 解决日志
查了我一天,也没看懂。
最后对比 目录区别,发现文件夹名字比较长。 又继续看了bat脚本编译生成的vcproj,发现里面有目录是相对的路径,如“../../../”这种。
但是用vs2019打开后,发现“../../../”这种相对路径编程绝对路径了,经过之前解决过得vs2015的恶心问题,初步判断是文件夹长度导致的问题。估计是 会有 “d:/folder1/folder2/../.."这种路径,超过了Windows的路径长度限制。编译器也不报这个错,报的都是看不懂的错,也是对Windows蛮无语的。
最后,把文件夹名称改成缩写, 脚本编译也没有问题了,这里有个问题,我这个文件夹名称已经是处于临界值了,如果后面再加层级,也会有这种问题。
之前尝试过设置Windows的文件名长度限制,未果。
对Windows这种设计表示很无语。
3. 建议:
3.1. windows下用vs编译器,尽量控制文件目录深度,编译器和Windows自身的兼容性不好,如果有文件名路径太长,会报些诡异的错,但是用其他编译器可能没问题。让你自我怀疑
3. 2. vs能不能对这种 路径问题做个兼容, 如果超长了,报个我能看懂的错,报错把编译器版本都改了,也是无语。