使用MSBuild构建VS2012 / VS2013项目的问题

时间:2015-06-17 18:56:12

标签: visual-studio-2012 visual-studio-2013 msbuild cygwin build-automation

我正在尝试在cygwin中自动构建一个(当前正在运行的)Visual Studio 2013,以便我可以自动构建我的项目并运行它。我的项目是使用VS2012工具集编译的。

我目前在cygwin中运行此bash脚本(基于此博文:http://anthonykosky.blogspot.com/2013/10/making-visual-studio-solutions-cmake.html):

error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1800' in {file}.obj

当它编译时,我得到了重复的错误:

{{1}}

这似乎是版本1800(VS2013,我正在创建解决方案)和1700(VS2012,我需要编译的工具集)之间的不匹配。

我有点困惑,为什么MSBuild没有这样做,因为我的解决方案在VS2013中正确配置。我需要在构建脚本中进行哪些更改才能确保编译?

谢谢!

1 个答案:

答案 0 :(得分:1)

这里有些不对劲:

  • 项目构建的工具集在项目本身(项目文件中的PlatformToolset属性)中指定,而不是在命令行上调用哪个vcvars文件
  • ${CMD} /c ...命令为脚本执行 nothing ,您链接的文章完全错误:它的作用是启动一个新进程,执行bat文件,然后终止。批处理文件设置的任何环境变量只对进程本地,而不是对调用进程。
  • 在使用msbuild <solution>构建之前甚至不需要调用vcvars。 vcvars设置PATH / INCLUDE / ...变量,这样你就可以在命令行上手动调用编译器,但这不是你在这里做的:你只是在构建PATH / INCLUDE / ...是自动的项目由哪个PlatformToolset确定
  • 确定

总结以上所有内容:只需在您的解决方案上调用msbuild即可,您不需要调用vcvars,而且由于您没有提供足够的信息,我不知道您为什么会收到链接器错误要弄明白但原因不在脚本中:链接器错误意味着您正在混合使用不同工具集构建的目标文件。可能你需要进行重建。只搜索为“_MSC_VER”检测到的不匹配:值与值匹配会提供足够的搜索命中率。