在研究FreeSWITCH源码时,经常会看到有一些自定义的宏。例如下图中的OpenSSLVersion。
我试着寻找配置这些宏的地方,但没找到。后来在网上搜索了一番,好像得直接编辑vcxproj文件。
因此我就试着查看了vcxproj文件。我用notepad打开了Download OPENSSL工程的vcxproj文件。文件中发现了如下一些内容:
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\..\w32\openssl-version.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\..\w32\openssl-version.props" /> </ImportGroup>这里指示了另外一个文件:openssl-version.props。
因此我又打开了openssl-version.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"> <OpenSSLVersion>1.0.1h</OpenSSLVersion> </PropertyGroup> <PropertyGroup> <OpenSSLVersionImported>true</OpenSSLVersionImported> </PropertyGroup> <PropertyGroup /> <ItemDefinitionGroup /> <ItemGroup> <BuildMacro Include="OpenSSLVersion"> <Value>$(OpenSSLVersion)</Value> </BuildMacro> </ItemGroup> </Project>显然这是一个XML文件。这里出现了刚才那个截图中的OpenSSLVersion宏以及它的值“1.0.1h”。
也就是说,每个工程里需要的宏都由一个XML的配置文件提供,并且在工程的vcxproj文件里指向这个配置文件。