首页 > 其他分享 >cmake调用VS2019的v140(VS2015)的工具链编译通过

cmake调用VS2019的v140(VS2015)的工具链编译通过

时间:2024-04-17 11:45:28浏览次数:30  
标签:10 cmake VS2019 Windows VS2015 Build Microsoft

最近的工作基本上在Linux上做。

但是,也有一个小工具需要同时支持Windows/Linux,工具依赖于Qt,从官方下载的版本上有qt5.6.3/5.12.12,这两个版本都有MSVC2015。

因此搞了一个Win7的虚拟机,VS2015实在太大了,从VS2019的社区版看到可以定制仅安装C++工具链即可。

VS2019裁剪最小项
C++核心桌面功能
实时调试器
Windows 10 SDK(10.0.16299.0)
MSVC v140 - VS 2015 C++ 生成工具(v14.00)

安装完后,使用VS 2019的IDE是可以编译一个样例工程,但通过cmake来调用,就会发现各种问题。

最头痛的一个问题是:

Could not load file or assembly 'Microsoft.Build, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified

对应的中文提示往往是:

    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\Microsoft.Cpp.Current.targets(64,5): error MSB4062: 未能从程序集 C:\Program Files (x86)\MSBuild\Micro
soft.Cpp\v4.0\v140\Microsoft.Build.CppTasks.Common.dll 加载任务“SetEnv”。未能加载文件或程序集“Microsoft.Build.Utilities.Core, Version=14.0.0.0, Culture=neutr
al, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。 请确认 <UsingTask> 声明正确,该程序集及其所有依赖项都可用,并且该任务包含实现 Mi
crosoft.Build.Framework.ITask 的公共类。 [D:\01.SrcCode\XXX\build\CMakeFiles\3.25.1\VCTargetsPath.vcxproj]

反复研究、搜索引擎,最终在github一个issue中找到原因,链接:https://github.com/deadlydog/New-NuGetPackage/issues/1

相应关键提示点:需要安装Microsoft Build Tools 2015!!!

> If you install the Microsoft Build Tools 2015 [https://www.microsoft.com/en-us/download/details.aspx?id=48159] it resolved the issue for me.
> 
> I had a number of VS2015 projects with this great package, and after a rebuild of my machine and clean VS2017 Pro installed I had the issue described:
> 
> Could not load file or assembly 'Microsoft.Build, Version=14.0.0.0
> 
> Installing the VS2015 build tools fixed it for me

CMake编译生成VS工程时,还有一些其他注意事项:

1、报MSBUILD找不到VCTargetsPath,

D:\01.SrcCode\xxxx\build\CMakeFiles\3.25.1\VCTargetsPath.vcxproj(14,2): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.Default.props”。请确认 <Import> 声明中的路径正确,且磁盘上存在该文件。

 实际上是MSBUILD找不到VS2015工具集的一些配置信息,通常安装在C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140路径下

通过环境变量设置即可解决,如下:

set VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140

2、VS2015与Windows SDK的配套问题,VS2015默认支持Windows 8.1 SDK,而现在通常是Windows 10 SDK,而且版本越来越新。

实际上Windows 10 SDK的新版本也是不再默认支持VS2015,最后支持VS2015的SDK版本为10.0.14393.0

链接:https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2014%202015.html

通常的解决办法是定义环境变量:CMAKE_SYSTEM_VERSIONCMAKE_WINDOWS_KITS_10_DIR,从文档https://cmake.org/cmake/help/v3.13/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.html

来看CMAKE_WINDOWS_KITS_10_DIR应该定义成这样:

set CMAKE_WINDOWS_KITS_10_DIR=C:\Program Files (x86)\Windows Kits\10

不带Include/10.0.xxxx字样。

3、当然,如果提示msbuild.exe都找不到,则应该在VS 2015 X86/X64本机工具命令提示符下的环境运行,或者执行脚本设置好环境变量c:\xxxx\vsvarsall.bat amd64

 

标签:10,cmake,VS2019,Windows,VS2015,Build,Microsoft
From: https://www.cnblogs.com/eaglexmw/p/18140231

相关文章

  • windows平台vs2019编译Luabind小记
    前言写这篇文章的目的是Luabind这个库比较老旧,对于新编译器需要做一些代码上的兼容,参考资料又都有点过时,所以特写此篇,记录踩坑过程;参考资料用VS2010编译luabind如何编译luabind支持vs2010之后所有版本Lua官网LuabindRepo编译前准备准备相关前置组件基本编译依赖Des......
  • CMake通过外部传参执行不同逻辑的2种方案
    CMake通过外部传参执行不同逻辑的2种方案有时候一些场景需要在执行cmake指令时传入一些参数的值,使得CMakeLists.txt文件中的程序执行不同的逻辑,下面给出2种方案。1、SET指令给参数默认值SET(BUILD_PLATFORM"x86"CACHESTRING"selectbuildcputype")#外部用cmake.-DBUI......
  • cmake 之make pack报错解决
    报错信息:看报错信息得知是一个名为control目录的权限有问题,尚未得知这个目录是在那个位置,姑且将build目录(cmake执行的目录)下的所有目录的权限都改一下chmod755*-R进行上述步骤后,仍然发生相同的报错。最后找了这个目录:这个目录的权限确实没有修改成功,重新验证了一下,发现......
  • 在远程windows上调试Cmake项目 C++
    记录一下CMake项目MSVC编译器远程调试方法参考资料  教程:在远程Windows计算机上调试CMake项目|MicrosoftLearn1.使用VS打开cmake项目2.右键main.cpp文件,添加调试配置选择C++ 3.会打开一个launch.vs.json文件 配置一下 注意:远程机器那里写需要运行的机器号 ......
  • cmake笔记
    demo1cmake_minimum_required(VERSION2.8)#cmake的最低版本project(test)#定义工程名称add_executable(mainadd.cppsub.cppmul.cppdiv.cppmain.cpp)#定义工程会生成一个可执行程序,格式:add_executable(可执行程序名源文件名称)#这里的可执行程序名和project中的项......
  • C++ - VS2019配置Qt开发环境
    下面正式介绍VS2019+Qt5.14.2开发环境的配置,其它版本类似,安装步骤如下:注意:首先自行安装好vs2019和qt5.14.2再执行以下步骤1、VisualStudio2019配置Qt环境(1)插件下载安装点击VS上方的菜单栏,选择“拓展—>管理拓展”进入管理拓展对话框,在右上方搜索qt,出现搜索结果后,选择......
  • CMake如何使用lupdate和lrelease生成多国语言包qm
    因为是刚开始学习QT,最近的一个项目,需要支持多国语言,即中、英、俄,以下是两种实现方式:方法一:#多语言批处理execute_process(WORKING_DIRECTORY"${PROJECT_SOURCE_DIR}"COMMAND"${LUPDATE_EXECUTABLE}"-recursive./-ts"${LANGUAGES_DIRECTORY}/XXX_zh_CN.ts""......
  • VS2019+open CV4.5.5的配置
    1.去openCV的官网下载对应版本:OpenCV-OpenComputerVisionLibrary2.右击此电脑--属性--高级系统设置--环境变量--点击变量Path的右边进行新建分别输入:D:\opencv\opencv\build\x64\vc15\binD:\opencv\opencv\build\x64\vc14\bin%OPENCV_DIR%\bin3.打开op......
  • vs2019托管调试助手 "ContextSwitchDeadlock"错误
     错误描述托管调试助手"ContextSwitchDeadlock":“CLR无法从COM上下文0xd183e0转换为COM上下文0xd18328,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送Windows消息的情况下处理一个运行时间非常长的操作。这种情况通常会......
  • 学习记录:bazel和cmake运行终端指令
    Bazel和CMake都是用于构建软件项目的工具,但它们之间有一些重要的区别和特点:Bazel:Bazel是由Google开发的构建和测试工具,用于构建大规模的软件项目。它采用一种称为“基于规则”的构建系统,它利用构建规则和依赖关系来自动化构建过程。Bazel支持多种编程语言,包括C++、Java、......