Visual Studio .props文件简介
其他的配置参考如下:
编译好的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'"/>
1
2
3
4
用户定义的宏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\lib</OPENCV_LIBRARY_DIR>
<OPENCV_LIBRARY_DEBUG>opencv_world400d.lib</OPENCV_LIBRARY_DEBUG>
<OPENCV_LIBRARY_RELEASE>opencv_world400.lib</OPENCV_LIBRARY_RELEASE>
</PropertyGroup>
在属性文件后文中需要用到的地方只需要计算这些宏的值即可
<IncludePath>$(OPENCV_INCLUDE);$(IncludePath)</IncludePath>
<LibraryPath>$(OPENCV_LIBRARY_DIR);$(LibraryPath)</LibraryPath>
1. 配置过程
说明:同时编译了32位和64位的opencv,但是由于命名冲突,会造成混淆,是不可能同时使用这两个版本的库,或者同时加入到环境变量中。本文只针对64位的opencv库进行说明,32位配置方法一致。
将opencv相关dll添加到系统环境变量中
打开编辑系统环境变量
在系统环境变量中点击新建,
名称为OPENCV_PATH,值为D:\build\opencv400_64\install\x64\vc15\bin
找到名为Path的变量,编辑 -> 新建,写上%OPENCV_PATH%。
如果编译opencv的过程中使用了GDAL和QT还应该将GDAL和QT的bin路径加入到环境变量中。
新建.props配置文件
打开属性管理器,在vs菜单中 视图 -> 属性管理器
右键单击项目名->新建项目属性文件,选择属性文件.props名称命名为CV_x64。存储路径选择一个合适的位置,放到项目之外,方便在其他用到opencv的项目引用。
关闭VS,使用支持XML的文本编辑器打开新建的CV_x64.props属性文件,将下列代码插入。
<?xml version="1.0" encoding="utf-8"?>
<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\lib</OPENCV_LIBRARY_DIR>
<OPENCV_LIBRARY_DEBUG>opencv_world400d.lib</OPENCV_LIBRARY_DEBUG>
<OPENCV_LIBRARY_RELEASE>opencv_world400.lib</OPENCV_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属性文件
已有的项目,可以通过编辑属性文件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>
或者打开VS之后通过属性管理器在需要的平台和模式的文件夹上右键单击,添加已有文件。