VS2017通过props文件配置opencv环境

文章目录

  • 0 简述
      • 适用于win32和x64平台Debug和Release的单文件配置方法
      • 用户定义的宏UserMacros
  • 1. 配置过程
    • 将opencv相关dll添加到系统环境变量中
    • 新建.props配置文件
    • 在vs项目中引用CV_x64.props属性文件

0 简述

编译好的opencv库(见32位和64位opencv编译)分为Debug(opencv_world400d.lib)和Release (opencv_world400.lib),Debug版本包含一些调试信息,Release版本做了一些性能优化。想要让项目在Debug和Release阶段引用不同的opencv库,需要针对平台和配置,在vs中建立多个配置文件(以64位平台为例,需要为Debug和Release建立两个不同的文件)。配置过程比较繁琐,且配置文件可复用性也不强。因此,一个易维护,自动化程度高的配置文件能够带来很大的便捷性。本文依靠vs属性配置文件的条件判断($(Configuration)|$(Platform))和用户定义的宏(UserMacros)来实现维护和环境配置。

适用于win32和x64平台Debug和Release的单文件配置方法

通过编辑.props属性文件,使用标签条件选择器实现对不同编译环境的判断,实现一个文件配置win32和64位平台的环境。

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"/>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"/>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"/>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"/>

用户定义的宏UserMacros

通过UserMacros,可以将opencv的多个路径放在属性文件的UserMarcos标签之中,便于修改和维护。

<PropertyGroup Label="UserMacros">
    <OPENCV_INCLUDE>D:\build\opencv400_64\install\include;D:\build\opencv400_64\install\include\opencv2;OPENCV_INCLUDE>
    <OPENCV_LIBRARY_DIR>D:\build\opencv400_64\install\x64\vc15\libOPENCV_LIBRARY_DIR>
    <OPENCV_LIBRARY_DEBUG>opencv_world400d.libOPENCV_LIBRARY_DEBUG>
    <OPENCV_LIBRARY_RELEASE>opencv_world400.libOPENCV_LIBRARY_RELEASE>
PropertyGroup>

在属性文件后文中需要用到的地方只需要计算这些宏的值即可

<IncludePath>$(OPENCV_INCLUDE);$(IncludePath)IncludePath>
<LibraryPath>$(OPENCV_LIBRARY_DIR);$(LibraryPath)LibraryPath>

1. 配置过程

说明:同时编译了32位和64位的opencv,但是由于命名冲突,会造成混淆,是不可能同时使用这两个版本的库,或者同时加入到环境变量中。本文只针对64位的opencv库进行说明,32位配置方法一致。

将opencv相关dll添加到系统环境变量中

  1. 打开编辑系统环境变量
    在系统环境变量中点击新建
    名称为OPENCV_PATH,值为D:\build\opencv400_64\install\x64\vc15\bin

  2. 找到名为Path的变量,编辑 -> 新建,写上%OPENCV_PATH%

如果编译opencv的过程中使用了GDAL和QT还应该将GDAL和QT的bin路径加入到环境变量中。

新建.props配置文件

  1. 打开属性管理器,在vs菜单中 视图 -> 属性管理器
  2. 右键单击项目名->新建项目属性文件,选择属性文件.props名称命名为CV_x64。存储路径选择一个合适的位置,放到项目之外,方便在其他用到opencv的项目引用。
  3. 关闭VS,使用支持XML的文本编辑器打开新建的CV_x64.props属性文件,将下列代码插入。

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros">
    <OPENCV_INCLUDE>D:\build\opencv400_64\install\include;D:\build\opencv400_64\install\include\opencv2;OPENCV_INCLUDE>
    <OPENCV_LIBRARY_DIR>D:\build\opencv400_64\install\x64\vc15\libOPENCV_LIBRARY_DIR>
    <OPENCV_LIBRARY_DEBUG>opencv_world400d.libOPENCV_LIBRARY_DEBUG>
    <OPENCV_LIBRARY_RELEASE>opencv_world400.libOPENCV_LIBRARY_RELEASE>
  PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <IncludePath>$(OPENCV_INCLUDE);$(IncludePath)IncludePath>
    <LibraryPath>$(OPENCV_LIBRARY_DIR);$(LibraryPath)LibraryPath>
  PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <IncludePath>$(OPENCV_INCLUDE);$(IncludePath)IncludePath>
    <LibraryPath>$(OPENCV_LIBRARY_DIR);$(LibraryPath)LibraryPath>
  PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Link>
      <AdditionalDependencies>$(OPENCV_LIBRARY_DEBUG);%(AdditionalDependencies)AdditionalDependencies>
    Link>
  ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RELEASE|x64'">
    <Link>
      <AdditionalDependencies>$(OPENCV_LIBRARY_RELEASE);%(AdditionalDependencies)AdditionalDependencies>
    Link>
  ItemDefinitionGroup>
  <ItemGroup>
    <BuildMacro Include="OPENCV_INCLUDE">
      <Value>$(OPENCV_INCLUDE)Value>
    BuildMacro>
    <BuildMacro Include="OPENCV_LIBRARY_DIR">
      <Value>$(OPENCV_LIBRARY_DIR)Value>
    BuildMacro>
    <BuildMacro Include="OPENCV_LIBRARY_DEBUG">
      <Value>$(OPENCV_LIBRARY_DEBUG)Value>
    BuildMacro>
    <BuildMacro Include="OPENCV_LIBRARY_RELEASE">
      <Value>$(OPENCV_LIBRARY_RELEASE)Value>
  ItemGroup>
Project>

在vs项目中引用CV_x64.props属性文件

  1. 已有的项目,可以通过编辑属性文件Your_Project_Name.vcxproj引用。
    使用支持xml的文本编辑器打开vcxproj文件,找到类似下面代码的部分。这里可以看到使用有4个部分,对应了vs属性管理器中的四个文件夹:
  • Debug|Win32
  • Debug|x64
  • Release|Win32
  • Release|x64
    将编辑好的属性文件的相对路径(…\…\CV_x64.props")加入对应的部分即可。下面的代码中,配置文件放在了64位平台上Debug和Release的部分。
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

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

  ImportGroup>
  <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="..\..\CV_x64.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="..\..\CV_x64.props" />
  ImportGroup>
  1. 或者打开VS之后通过属性管理器在需要的平台和模式的文件夹上右键单击,添加已有文件。

你可能感兴趣的:(openCV,Tips)