解决vcxproj文件在团队协作中冲突的问题
解决vcxproj文件在团队协作中冲突的问题

解决vcxproj文件在团队协作中冲突的问题

问题描述

团队使用visual studio进行开发,每个人的开发环境(比如SDK的小版本号、相关依赖的本地文件路径甚至是vs版本)不相同。而这些环境信息保存在vcxproj文件内,同时该文件还保存了源文件列表,即必须通过Git进行同步。

我的解决方案

我的环境

我使用vs2022,团队其他成员使用vs2017,使用OpenCV和rapidJSON等依赖

版本不一致问题

vs版本不一致

高版本向下兼容或者全部升级最新版。注:比如高版本是2022,低版本2017,并不是让你重新安装一个vs2017,而是在高版本vs里安装低版本MSVC编译器和相关环境

具体方法是使用visual studio installer,点击修改

在“单个组件”选项卡里搜索对应的编译器版本,如vs2022的版本为V143、vs2017的编译器版本为V141。安装对应的低版本环境,对我来说就是V141

SDK小版本

建议安装统一的版本,高版本向下兼容,我们统一选择了10.0.17763.0这个版本

如果vs版本较高,可以尝试设置成10.0,vs会自动使用本地安装的最新SDK(可能会引起问题)

方法,在vs中,打开“解决方案资源管理器”,右键当前的解决方案,选择“重定向项目”,选的对应的版本即可

依赖不一致

每个人本地的依赖不尽相同,比如我们使用的OpenCV安装路径都不一样,这就需要使用VS的属性表进行设置

在我们的项目中,OpenCV是必须的,还有每个人自己的依赖(比如有人的rapidJSON是直接下载源码,有人用了VCPkg安装),因此设置了4个属性表并添加至gitignore文件内,不随Git同步。

  • opencv-debug.props OpenCV专用属性表,Debug模式
  • opencv-release.props OpenCV专用属性表,Release模式
  • user-debug.props 当前用户自己的属性表,Debug模式
  • user-release.props 当前用户自己的属性表,Release模式

属性表可以是空的,没有任何配置,但必须存在且命名一致,且路径是源码(或者项目)目录,这样在vcxproj文件中就能保持一致

<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="opencv-debug.props" />
    <Import Project="user-debug.props" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="opencv-release.props" />
    <Import Project="user-release.props" />
  </ImportGroup>

后续每个人进行项目属性的变更时,只能通过编辑user-****.props文件进行更改,不能直接更改项目属性,保证了每个人的个性化配置不会被同步

Over

好啦~ 同步的问题被完美解决掉啦

当然啊,个人建议,开发大型C++项目,还是尽可能做到版本一致,包括VS的大版本(2022、2017)和SDK的小版本。版本的选择,个人喜欢是用新不用旧

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注