这几天link引入了qt,开发都没问题,但是jenkins上用msbuild总是编译失败,原因是
“Moc’ing xxx文件,系统找不到指定路径”
在jenkins服务器上直接用msbuild也是失败,但是在jenkins服务器上用vs打开项目编译过一次就好了。但是jenkins每次的编译时最好都清理一遍。所以这个问题还是没彻底解决。

今天花了些时间研究了一下这个问题,最后发现是少上传了一个文件导致的。

首先从现象看是没找到moc文件(qt有个编译工具叫moc)。看了些网上的很多都说是路径有问题,然后看了项目配置文件,里面的自定义编译是“$(QTDIR)\bin\moc.exe”,和网上的解决方案是一致的,然后就怀疑是否是$(QTDIR)的问题。
查了下资料这个东西是编译器用的宏,类似环境变量。这个$(QTDIR)显然不是自带的,看了下最后发现它是定义在.vcxproj.user文件中的。
.vcxproj.user这个文件几乎不会改变的,而之前为了减少git提交导致的冲突就把这个文件列入了忽略列表。引入了qt后,这个文件发生了改变但是没有提交。这个文件定义了重要的$(QTDIR),没有了这个宏定义就编译失败了。而之前用vs打开后会自动重新生成这个文件,所以就可以编译了。

所以综上所述,.vcxproj.user文件通常可以不提交,但是如果自定义了编译器宏的时候就必须要提交了。这个文件的内容非常少,我打开后只有关于$(QTDIR)的定义,所以是否需要提交只要打开看一下就可以立刻知道。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐