首页 > 编程语言 >msvc++工程之vs版本升级及工程目录规范

msvc++工程之vs版本升级及工程目录规范

时间:2023-08-06 22:23:55浏览次数:48  
标签:msv sln c++ 升级 版本升级 vs 版本 vcxproj

为什么要升级msvc++工程版本

对msvc++工程进行vs版本升级,一方面是可以使用较新的C++标准及对64位更好的支持。

首先你需要对msvc++ project文件有一定的了解,主要是vcxproj和vcxproj.filter这两个文件,升级的时候需要手动修改sln和vcxproj文件。

vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识 - 知乎 (zhihu.com)


msvc的工程规范(sln和vcxproj)

项目根目录
	src/
	vs2012/
	更多的vs版本/
	vs2022/
	lib/
	...

以vs版本号做文件夹的命名好处是因为同一个c++工程在不同的vs版本上可能会有兼容性的问题,再展开不同的vs版本目录结构都是如下:

项目解决方案.sln
project1目录
	project1.vcxproj
	project1.vcxproj.filters
project2目录
	project2.vcxproj
	project2.vcxproj.filters
......	
props目录
	xx_debug.props
	xx_hybrid.props
	xx_editor_lib.props

升级vs的版本步骤

  1. 建议复制原来的sln和vcxproj文件
  2. 修改新sln中的vs的版本号
  3. 改完后使用新版本的vs打开新的sln,就会提示你对包含的project进行升级,点击升级即可
  4. 修复新版本下的语法、编译、链接等等错误
  5. 当然在真实的商业大型项目中,升级vs版本的过程是很痛苦及漫长的,甚至会出现无源码的工程无法升级。

sln文件头标识vs版本号的内容如下:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32630.192
MinimumVisualStudioVersion = 10.0.40219.1

例个例子,我把3个代码量很少的学习工程,从vs2012升级到vs2022

Console类型的cpp项目升级很顺利,Windows类型的cpp工程也很顺序,mfc升级后,运行出错如下:

Build started...
1>------ Build started: Project: mymfc, Configuration: Debug Win32 ------
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(480,5): error MSB8041: MFC libraries are required for this project. Install them from the Visual Studio installer (Individual Components tab) for any toolsets and architectures being used.
1>Done building project "mymfc.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

通过报错信息可知是缺少mfc环境,需要安装。


不同vs版本之间的差异

升级完之后,对比不同版本的sln及vcxproj之间的diff,主要集中在Toolset及平台设置方面,当然是从vs12及之后的版本进行升级。


标签:msv,sln,c++,升级,版本升级,vs,版本,vcxproj
From: https://www.cnblogs.com/zhaoqingqing/p/17610182.html

相关文章

  • C++核心编程——引用
    引用1引用的基本使用作用:给变量起别名语法:数据类型&别名=原名示例:intmain(){ inta=10; int&b=a; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; b=100; cout<<"a="&......
  • C与C++之间的相互调用及函数区别
    最近项目需要使用googletest(以下简称为gtest)作为单元测试框架,但是项目本身过于庞大,main函数无从找起,需要将gtest框架编译成静态库使用。因为项目本身是通过纯c语言编写,而gtest则是一个c++编写的测试框架,其中必然涉及c与c++之间的相互调用。注意,本文的前提是,c代码采用gcc等c语言编......
  • C/C++经典书籍
    记录四本C/C++的经典书籍。最经典的莫过于1988年出版的《TheCProgrammingLanguage》第二版1.C1.1零基础:CPrimerPlus,SixthEdition,作者:StephenPrata,2013年出版,涵盖C11标准1.2C语言作者巨著(适合有C基础的阅读):TheCProgrammingLanguage,SecondEdition,作者:Denni......
  • C++入门到放弃(09)——友元:friend
    ​1.基本用法友元的概念还是比较简单的,主要作用是,让声明的友元函数或者友元类,可以直接访问当前类的私有成员。可以这样理解,友元声明代表了,向大家说明这个函数或类是我的朋友(friend),因此它可以随意使用我内部的私有成员。基本形式:friend+函数声明friend+class+类名classPoin......
  • 【VSCode】mac系统利用VSCode配置C++环境
    https://blog.csdn.net/bsy1111/article/details/131056647在官网上看到VSformac不能建C++项目,找到一个教程用VSCode配置一下C++环境可以跑点简单的代码应付一下日常使用,要是有大佬知道怎么在mac上用VisualStudio写C++的话还麻烦不吝赐教......
  • C++动态规划经典试题解析之打家劫舍系列
    1.前言力扣上有几道与打家劫舍相关的题目,算是学习动态规划时常被提及的经典试题,很有代表性,常在因内大大小小的社区内看到众人对此类问题的讨论。学习最好的方式便是归纳总结、借鉴消化,基于这个目的,本文对此类问题也做了讲解,在一些优秀思想的基础上添加了个人观点。闲话少说,进入......
  • 最低通行费C++
    题目描述】一个商人穿过一个N×N的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。这个商人期望在规定时间内用最少......
  • 怪盗基德的滑翔翼C++
    题目描述】怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的......
  • C++中BigEden、SmallEden编码
    基本概念大端小端表示,一个数字在内存中或硬盘上记录时,是高位在前或在后,高位在前就是大端(BigEden),在后就是小端(samllEden)。我们日常记录和代码里定义一千二百三四如:inta=1234;就是大端记录。如果是小端的一千二百三十四:就是"4321"了。 通常应用一般而言,平台使用的大......
  • C++_函数模板
    函数模板》是不进行编译的,因为类型还不知道模板的实例化》函数调用点进行实例化:在函数调用点,编译器用用户指定的类型,从原模板实例化一份函数代码出来模板函数》才是要被编译器所编译的模板类型参数typename/class模板非类型参数模板的实参推演》可以根据用户传......