рдпрд╣ рдЖрд▓реЗрдЦ C ++ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╣реИред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд┐рдЦрд░реЗ рд▓реЗрдЦреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдХрдо рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдирдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕реНрд╡рдпрдВ Microsoft рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдореИрдВ рд╣рд╛рде рдкрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрджрд░реНрдн рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХреЗред рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдЧреБрд╕реНрд╕рд╛ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдШреГрдгрд┐рдд рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдХрд╛рд░рдг, рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЕрдм рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рд╣рдо рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдлреНрд▓реИрдЯрдмрдлрд╝рд░ рд╕реНрдХреАрдорд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлреНрд▓реИрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдФрд░ рдЬрдм рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдФрд░ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
* рд╕реНрддрд░ 1: .vcxproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЪрдврд╝реЗрдВ.Props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдЕрд▓рдЧ .vcxproj рдФрд░ .props?рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдирд╛рд╣рдо рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ - рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд* рд╕реНрддрд░ 2: рдХрд╕реНрдЯрдо рдХрд╕реНрдЯрдо рд╕рдВрдХрд▓рдирдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгMSBuild рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВрд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВU2DCheck рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рд░реЛрдХреЗрдВрд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо .target рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВCustomBuildStep рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?рдЙрдЪрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛* рд╕реНрддрд░ 3: рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рдЬреАрдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрддрд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдореЗрдВ .vcxproj рдХреЗ рдмреЙрд▓реНрд╕ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВрд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдирдИ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВрдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕* рд╕реНрддрд░ 4: MSBuild рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░рдиреЛрдЯ: рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡реАрдПрд╕ 2017 рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реА рд╕рдордЭ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕реЗ рдХрдо рд╡реАрдПрд╕ 2012 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рд╕реНрддрд░ 1: .vcxproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЪрдврд╝реЗрдВ
рдЖрдЗрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ .vcxproj рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug|x64"> <Configuration>Debug</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|x64"> <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <VCProjectVersion>15.0</VCProjectVersion> <ProjectGuid>{0D35456E-42DA-418B-87D4-55E32B8E1373}</ProjectGuid> <Keyword>Win32Proj</Keyword> <RootNamespace>protobuftest</RootNamespace> <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Label="Shared"> </ImportGroup> <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" /> </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" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LinkIncremental>false</LinkIncremental> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> </ClCompile> <Link> <SubSystem>Console</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> </ClCompile> <Link> <SubSystem>Console</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="pch.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="pch.cpp"> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> </ClCompile> <ClCompile Include="protobuf_test.cpp" /> </ItemGroup> <ItemGroup> <Text Include="test.proto" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>
рдмрд╣реБрдд рдЕрдкреНрд░рд╛рдкреНрдп рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреА рдФрд░ рд▓рдЧрднрдЧ рддреБрдЪреНрдЫ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
.Props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд▓реА рд╣реИ, рд╡рд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ рдФрд░ рдЗрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЖрдЗрдП рдЗрди рдкрдбрд╝рд╛рд╡реЛрдВ рдХреЛ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдЖрдпрд╛рдд рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ #include рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреА .vcxproj рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ .vcxproj рд╕реЗ, рдмрджрд▓реЗ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдШреЛрд╖рдгрд╛рдУрдВ
рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓, рд▓реЗрдХрд┐рди рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╢реАрдЯреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, .vcxproj рдореЗрдВ рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдЖрдпрд╛рдд рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░реЗрдВрдЧреЗ
рдЕрдм .vcxproj рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЖрд╕рд╛рди рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="settings.props" /> <PropertyGroup Label="Globals"> <ProjectGuid>{0D35456E-42DA-418B-87D4-55E32B8E1373}</ProjectGuid> </PropertyGroup> <ItemGroup> <ClInclude Include="pch.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="pch.cpp"> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> </ClCompile> <ClCompile Include="protobuf_test.cpp" /> </ItemGroup> <ItemGroup> <Text Include="test.proto" /> </ItemGroup> </Project>
рдЕрдирд╛рд╡рд╢реНрдпрдХ XML рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ рдЗрд╕реЗ рдФрд░ рднреА рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐ "PrecompiledHeader" рдХреЛ рдЕрдм рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ (рд░рд┐рд▓реАрдЬрд╝ / рдбрд┐рдмрдЧ) рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (win32 / x64) рдХреЗ рд▓рд┐рдП 4 рдмрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдпрд╣ рдШреЛрд╖рдгрд╛ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЗрдЯрдордЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп .vcxproj рдкрд░ рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ 1) рдмрд╕ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, 2) рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрдпрд╛ рд╣реИ (рдкреНрд▓рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕) рдФрд░ 3) рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИред
<?xml version="1.0" encoding="utf-8"?><Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="settings.props" /> <PropertyGroup Label="Globals"> <ProjectGuid>{0D35456E-42DA-418B-87D4-55E32B8E1373}</ProjectGuid> </PropertyGroup> <ItemGroup> <ClInclude Include="pch.h" /> <ClCompile Include="pch.cpp"> <PrecompiledHeader>Create</PrecompiledHeader> </ClCompile> <ClCompile Include="protobuf_test.cpp" /> <Text Include="test.proto" /> </ItemGroup> </Project>
рд╣рдо рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдЕрд▓рдЧ .vcxproj рдФрд░ .props?
рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рд╛рдмреБрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдлрд╛рдЗрд▓ рдХрд╛ "рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ" рд╣реЛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдмрддрд╛ рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдлрд┐рд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдХрдИ .vcxproj рдлрд╛рдЗрд▓реЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде
рдПрдХ рд╣реА .props рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рд╣рдордиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП
рдЧрдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╣рдо рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА
рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдРрд╕рд╛ рдПрдХреАрдХрд░рдг рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрднреА рднреА рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ .props рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ .props рдлрд╛рдЗрд▓реЗрдВ рдЕрдиреНрдп .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдИ .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА "рдкрджрд╛рдиреБрдХреНрд░рдо" рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд▓реЗрдХрд░ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгред рдПрдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдоред MSBuild рдореЗрдВ рдПрдХ рдирд┐рдпрдо рд╣реИ рдХрд┐ рдпрджрд┐ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рджреЛ рдмрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд╣рд▓реЗ base.prop рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдЖрдзрд╛рд░ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдкрд╣рд▓реЗ рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдордирдорд╛рдиреА рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА .props рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╣реАрдВ рдФрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рдереЗред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╣реАрдВ рди рдХрд╣реАрдВред рдпрд╣ рдорд╛рдирдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрджреНрдзрд┐рдорд╛рди рд╣реИ рдЬреЛ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ .sln рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ .vcxproj рдХреЗ рд╕реНрдерд╛рди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ...> <Import Project="$(SolutionDir)\settings.props" /> ... </Project>
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдирд╛
рдЕрдм рдЬрдм рд╣рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВ .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╛рдиреЗ рдирд╛рдо рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ UserMacros рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╕рдореВрд╣ рдЯреИрдЧ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
<PropertyGroup Label="UserMacros"> <RepositoryRoot>$(SolutionDir)\..</RepositoryRoot> <ProjectsDir>$(RepositoryRoot)\projects</ProjectsDir> <ThirdPartyDir>$(RepositoryRoot)\..\ThirdParty</ThirdPartyDir> <ProtoBufRoot>$(ThirdPartyDir)\protobuf\src</ProtoBufRoot> </PropertyGroup>
рдлрд┐рд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ, ".. \ _ \ _ \ _ \ _ \ _ рдерд░реНрдбрдкрд╛рд░реНрдЯреА \ рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ \ src \ protoc.exe" рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдмрд╕ "$ (ProtoBufRoot) \ protoc.exe" рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдкрдардиреАрдпрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдореЛрдмрд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ - рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ .vcxproj рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдбрд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдФрд░ рд╣рдо .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдХрд░ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рдХрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдЧреНрд░реБрдкреНрд╕ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛрдЬрд╝ рдЬрд┐рдирдХреЗ рдирд╛рдо рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЦреЛрдиреЗ рдХреЗ рдбрд░ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрд▓рдЧреНрди .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╣рд┐рдд рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреИрдм рдкрд░ рдПрдХ рд╕рд╛рде рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдмрд╛рдК рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдорддреМрд░ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░рд┐рд▓реАрдЬ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЗрдХрдЯреНрдареА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдмрдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдирд╣реАрдВред рддреЛ рдпрд╣ рдПрдХ рдЕрд╕рд╣рдЬ рдФрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рдПрдХ рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдПрдХ рдкреНрд░реЙрдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рдкреИрдХ" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ZeroMQ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemDefinitionGroup> <ClCompile> <AdditionalIncludeDirectories>$(ThirdPartyDir)\libzmq\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>ZMQ_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libzmq-v120-mt-sgd-4_3_1.lib;Ws2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libzmq-v120-mt-s-4_3_1.lib;Ws2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(ThirdPartyDir)\libzmq\lib\x64\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> </Project>
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░реЙрдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗDirectDirectories рдХреЗ рдЯреИрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдХреА рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреИрдЧ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ; рдЯреИрдЧ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рддреЗ рд╣реБрдП% (рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реАрдорд╛рдПрдБ)ред MSBuild рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ, рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рдкрд┐рдЫрд▓реЗ рдЯреИрдЧ рдорд╛рди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдирд┐рд░реНрдорд╛рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реАрдорд╛рдПрдБ рдореЗрдВ рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХрдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
ZeroMQ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдХреЗрд╡рд▓ рджреА рдЧрдИ .props рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ...> <Import Project="$(SolutionDir)\settings.props" /> <Import Project="$(SolutionDir)\zeromq.props" /> ... </Project>
рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрдд рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЛрдбрд╝ - MSBuild рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдФрд░ рдбреАрдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рджреЛрдиреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, zeromq.props рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ ZeroMQ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдордЬрд╝рдмреВрддреА рд╕реЗ рдФрд░ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИред рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬреАрдпреВрдЖрдИ рднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдмрдВрдзрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдорд╛рдЙрд╕ рдкреНрд░реЗрдореА рдХреБрдЫ рд╣реА рдХреНрд▓рд┐рдХ рдореЗрдВ рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХреЗрдВред

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреВрд▓реНрд╕ рдХреА рддрд░рд╣, рдпрд╣ GUI рдПрдХ рдкрдардиреАрдп рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдХреЗ рдмрдЬрд╛рдп .vcxproj рдХреЛрдб рдЬреИрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝реЗрдЧрд╛
рдРрд╕рд╛ рдХреЛрдб <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="..\..\..\..\projects\BuildSystem\thirdparty_libraries\PropertySheets\zeromq.props" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Import Project="..\..\..\..\projects\BuildSystem\thirdparty_libraries\PropertySheets\zeromq.props" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <Import Project="..\..\..\..\projects\BuildSystem\thirdparty_libraries\PropertySheets\zeromq.props" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <Import Project="..\..\..\..\projects\BuildSystem\thirdparty_libraries\PropertySheets\zeromq.props" /> </ImportGroup>
рдЗрд╕рд▓рд┐рдП рдореИрдВ .vcxproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдЬреЛ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдЙрд╕рдХреЗ рд╕рдорд╛рдиред рдереНрд░реЙрдкреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдерд░реНрдбрдкрд╛рд░реНрдЯреА рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдПрдХрд▓ zeromq.props рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рд╕рдВрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЙрдирди рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдХрдЯ рд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд .props рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ - рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд
рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ .vcxproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдЙрдмрд╛рдК рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреМрд╢рд▓ рд╣реИ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯреВрдбрд┐рдпреЛ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ .vcxproj рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рднреА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЦреЛрд▓реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореЗрдиреВ рд╕реЗ Project \ Export рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ, рдЖрдк рдХрдИ рддреБрдЪреНрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рд▓рд╛рдЗрди рдХрд╛ рдирд╛рдо рдЬреЛ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рдпрд╣ рднреА рдЪреБрдиреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рддреБрд░рдВрдд рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ, рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рд╕рд╣рд┐рдд), рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ GUID рдХреА рдЬрдЧрд╣ред рдмрд▓реНрдХрд┐ рдмрдбрд╝реЗ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .vstemplate рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рд╕реВрдЪреА (рдЬреИрд╕реЗ рдкреНрд░рдпреБрдХреНрдд рдЖрдЗрдХрди рдпрд╛ рд╡рд░реНрдгрди рдкрдВрдХреНрддрд┐) рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> <TemplateData> <Name>C++ console application</Name> <Description>C++ console application for our project</Description> <ProjectType>VC</ProjectType> <ProjectSubType> </ProjectSubType> <SortOrder>1000</SortOrder> <CreateNewFolder>true</CreateNewFolder> ` <DefaultName>OurCppConsoleApp</DefaultName> <ProvideDefaultName>true</ProvideDefaultName> <LocationField>Enabled</LocationField> <EnableLocationBrowseButton>true</EnableLocationBrowseButton> <Icon>ng.ico</Icon> </TemplateData> <TemplateContent> <Project TargetFileName="$projectname$.vcxproj" File="console_app.vcxproj" ReplaceParameters="true"> <ProjectItem ReplaceParameters="false" TargetFileName="$projectname$.vcxproj.filters">console_app.vcxproj.filters</ProjectItem> <ProjectItem ReplaceParameters="false" TargetFileName="main.cpp">main.cpp</ProjectItem> <ProjectItem ReplaceParameters="false" TargetFileName="stdafx.cpp">stdafx.cpp</ProjectItem> <ProjectItem ReplaceParameters="false" TargetFileName="stdafx.h">stdafx.h</ProjectItem> </Project> </TemplateContent> </VSTemplate>
рдкреИрд░рд╛рдореАрдЯрд░ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдЯрд░реНрд╕ = "рд╕рдЪ" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ vcxproj рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(SolutionDir)\console_app.props" /> <PropertyGroup Label="Globals"> <ProjectGuid>{$guid1$}</ProjectGuid> <RootNamespace>$safeprojectname$</RootNamespace> </PropertyGroup> <ItemGroup> <ClCompile Include="main.cpp" /> <ClCompile Include="stdafx.cpp"> <PrecompiledHeader>Create</PrecompiledHeader> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="stdafx.h" /> </ItemGroup> </Project>
GUID рдФрд░ RootNamespace рдХреЗ рд╕реНрдерд╛рди рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдЯрдмреНрд╕ $ $ $ $ 1 рдФрд░ $ 1 рдХрд╛ рд╕реЗрдлрдкреНрд░реЛрдЬреЗрдХреНрдЯрдирд╛рдо рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдЯреВрдбрд┐рдпреЛ рд░рд┐рдкреНрд▓реЗрд╕рдкреНрд░рдорд╛рд░реНрдЯрд░реНрд╕ = "рд╕рд╣реА" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдлреЙрд░реНрдо $ рдирд╛рдо рдХреЗ рд╕реНрдЯрдмреНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдЯреВрдбрд┐рдпреЛ
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЬрдм рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЬреЛ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ) рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ (рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП) рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк .vstemplate рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╣реА рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП .vcxproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдЯрд░реНрд╕ = рдЧрд▓рдд рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдмрд╕ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЬреНрдЮрд╛рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ
% USERPROFILE% \ Documents \ Visual Studio XX \ Templates \ ProjectTaper рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдорд┐рд▓реЗрдВрдЧреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЯреНрд░реА рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ ProjectType рдФрд░ ProjectSubType рдЯреИрдЧ рд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ .vstemplate рдлрд╝рд╛рдЗрд▓ рдореЗрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд▓рд┐рдП "рд╡реНрдпрдХреНрддрд┐рдЧрдд" рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдирд┐рд░реНрдпрд╛рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд╡рд╛рдж рдореЗрдВ "рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ" рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдЯреЗрдореНрдкрд▓реЗрдЯ "рдЪреЗрдХрдмреЙрдХреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд░рдЦрдХрд░ рдХрд░реЗрдЧрд╛ред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (.vsix) рдмрдирд╛рдПрдВ
VSIX рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЙрд╕рдХреЗ рдмрд╛рдж, "VSIX рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рд╡рд┐рдХрд▓реНрдк рджреГрд╢реНрдп C # \ Extensibility рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди (C #) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕реЗрдЯ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реАрдПрд╕рдЖрдИрдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ред VSIX рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдПрдХ рдЦрд╛рд▓реА VSIX рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, .vsixmanifest рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реАрдзреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ GUI рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЯреИрдм рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╛рдо, рд╡рд┐рд╡рд░рдг, рд▓рд╛рдЗрд╕реЗрдВрд╕) рджрд░реНрдЬ рдХрд░реЗрдВред рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрдерд┐рдд "рд╕рдВрд╕реНрдХрд░рдг" рдлрд╝реАрд▓реНрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдлрд┐рд░ рд╣рдо рдПрд╕реЗрдЯреНрд╕ рдЯреИрдм рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ "Add new Asset" рдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ: Microsoft.VisualStudio.ProjectTemplate, рд╕реНрд░реЛрдд: рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдлрд╝рд╛рдЗрд▓, рдкрде: (рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдирд╛рдо)ред рдареАрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВ рдЬрдм рддрдХ рд╣рдо рд╡реАрдПрд╕рдЖрдИрдПрдХреНрд╕ рдореЗрдВ рд╕рднреА рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ: рдмрд┐рд▓реНрдб рд╕рдорд╛рдзрд╛рди рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░реЗрдВ рдФрд░ рдХрдорд╛рдВрдб рдХрд░реЗрдВред рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЖрдЙрдЯрдкреБрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .vsix рдХреЗ рд╕рд╛рде рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реИред рдирд┐рд░реНрдорд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ "рд▓реЙрдиреНрдЪ" рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдПрдВ рдФрд░ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВред рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ - рд╣рдореЗрдВ "рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ" рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рд▓рддреЗ рд╣реИрдВ

рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдХреНрд▓рд┐рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдпреЛрдЧреНрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЯреВрд▓ \ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдЕрдкрдбреЗрдЯреНрд╕ рд╕рдВрд╡рд╛рдж рдореЗрдВ рджреЗрдЦрд╛ (рдФрд░ рд╣рдЯрд╛рдпрд╛) рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╕реНрддрд░ 2: рдХрд╕реНрдЯрдо рдХрд╕реНрдЯрдо рд╕рдВрдХрд▓рди
рдареАрдХ рд╣реИ, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдордиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ vcxproj рдФрд░ props рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрджреНрднреБрдд Google рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .proto рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░ рдореЗрдЯрд╛-рднрд╛рд╖рд╛ (.proto рдлрд╝рд╛рдЗрд▓) рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ ("рд╕реНрдХреАрдо") рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдкрд╛рдЗрд▓рд░ (рдкреНрд░реЛрдЯреЛрдХред Exe) рджреНрд╡рд╛рд░рд╛ .cpp / .cs / .py / .java / .java рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рдЗрд╕ рд╕реНрдХреАрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди / рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЛрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП .cpp рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдХреНрд▓рд╛рд╕рд┐рдХ рдорд╛рдереЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реАрдзрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░реЙрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реА-рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЛрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ:- рдХрдорд╛рдВрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдпрджрд┐ рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрдб рдХрд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛
- рдЬрдм рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛, рдЬрд┐рд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдХрджрдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ
- рдпрджрд┐ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдлрд╛рдЗрд▓ рдЕрднреА рддрдХ рдкрд╣рд▓реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ рд╣реИрдВ)ред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕реНрд╡рдпрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ "рд╕рдордЭрд╛рдиреЗ" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, MSBuild рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдРрд╕реА .proto рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИредMSBuild targets
MSBuild, build targets, targets. Clean , Compile , Link Deploy. .vcxproj . nix- make ┬лmakefile┬╗, : .vcxproj XML- makefile.
рд▓реЗрдХрд┐рди рд╕реНрдЯреЙрдк-рд╕реНрдЯреЙрдк рдХреЛ рдПрдХ рднреНрд░рдорд┐рдд рдкрд╛рдардХ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╣ рдХреИрд╕реЗ рд╣реИ? рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ .vcxproj рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд▓рдХреНрд╖реНрдп рдпрд╛ рдХреЛрдИ рд╕рдорд╛рдирддрд╛ рдирд╣реАрдВ рдереАред рдлрд┐рд░ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рд▓рдХреНрд╖реНрдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ "рдЫрд┐рдкреЗ рд╣реБрдП" рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ C ++ рдХреЛрдб рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП .vcxproj рдореЗрдВ рдорд╛рдирдХ рд▓рдХреНрд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
┬л┬╗ - C++- ┬л┬╗ Build, Clean Rebuild ┬л┬╗ . toolset toolset , , Clang.
toolset- toolset . ,
.
target-. target MSBuild
- (inputs)
- (outputs)
- targets (dependencies)
- target-
- target- (tasks)
ClCompile .cpp cl.exe .obj . ClCompile cl.exe. .vcxproj
<ClCompile Include="protobuf_test.cpp" />
(Include) protobuf_tests.cpp (inputs) ,
<ItemDefinitionGroup> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> </ClCompile> </ItemDefinitionGroup>
┬лUse┬╗ ClCompile.PrecompiledHeader target /Yu cl.exe.
target .proto
target- target:
<Target Name="GenerateProtobuf"> ...steps to take... </Target>
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рд▓рдХреНрд╖реНрдп рдХреЛ .targets рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдерд╛ (vcxproj рдФрд░ рд▓рдХреНрд╖реНрдп рдФрд░ рдкреНрд░реЙрдкреНрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рджреЛрдиреЛрдВ рд╕рдорддреБрд▓реНрдп XML рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╛рдирдХ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВрдЧреЗред рддрд╛рдХрд┐ .vcxproj рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдореЗрдВ рдЕрдм рдЖрдк рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗрдВ <ItemGroup> <ClInclude Include="cpp.h"/> <ProtobufFile Include="my.proto" /> <ItemGroup>
рд╣рдордиреЗ рдЬреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдпрд╛ рд╣реИ, рдЙрд╕реЗ рдЙрдкрд▓рдмреНрдз ItItName рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП <ItemGroup> <AvailableItemName Include="ProtobufFile"> <Targets>GenerateProtobuf</Targets> </AvailableItemName> </ItemGroup>
рд╣рдореЗрдВ рдпрд╣ рднреА рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MSBuild "рдХрд╛рд░реНрдп" рдирд╛рдордХ рдПрдХ рдЗрдХрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЯрд╛рд╕реНрдХ - рдпрд╣ рдХреБрдЫ рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ", "рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ", "рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ", "рдХреБрдЫ рдХреЙрдкреА рдХрд░реЗрдВ"ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо protoc.exe рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрдХрд┐рдВрдЧ Exec рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдВрдХрд▓рди рд▓реЙрдЧ рдореЗрдВ рдЗрд╕ рдЪрд░рдг рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрдХрд┐рдВрдЧ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдпрд╣ рднреА рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдорд╛рдирдХ рд▓рдХреНрд╖реНрдп рддреИрдпрд╛рд░рдлреЙрд░рдмрд┐рд▓реНрдб рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирддреАрдЬрддрди, рд╣рдо рдЗрд╕ protobuf.targets рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рд╣ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <AvailableItemName Include="ProtobufSchema"> <Targets>GenerateProtobuf</Targets> </AvailableItemName> </ItemGroup> <Target Name="GenerateProtobuf" Inputs="%(ProtobufSchema.FullPath)" Outputs=".\generated\%(ProtobufSchema.Filename).pb.cc" AfterTargets="PrepareForBuild"> <Message Importance="High" Text="Compiling schema %(ProtobufSchema.Identity)" /> <Exec Command="$(Protoc) --cpp_out=.\generated %(ProtobufSchema.Identity)" /> </Target> </Project>
рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЧреИрд░-рддреБрдЪреНрдЫ рдСрдкрд░реЗрдЯрд░ "%" ( рдмреИрдЪрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП" рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рд╛ ред рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рдЬрдм рд╣рдо рдлреЙрд░реНрдо рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ <ItemGroup> <ProtobufSchema Include="test.proto"> <AdditionalData>Test</AdditionalData> </ProtobufSchema> </ItemGroup>
┬лProtobufSchema┬╗ ┬лtest.proto┬╗ () AdditionalData ┬лTest┬╗. ┬лProtobufSchema.AdditionalData┬╗ ┬лTest┬╗. AdditionalData, MSBuild
Identity ( ), Filename ( ) FullPath ( ). % MSBuild тАФ .. .proto .
<Import Project="protobuf.targets" Label="ExtensionTargets"/>
protobuf.props рдореЗрдВ, рд╣рдо .bobxproj-e рдкрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЙ-рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, ProtobufSchema <ItemGroup> ... <ProtobufSchema Include="test.proto" /> <ProtobufSchema Include="test2.proto" /> </ItemGroup>
рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ1>------ Rebuild All started: Project: protobuf_test, Configuration: Debug x64 ------
1>Compiling schema test.proto
1>Compiling schema test2.proto
1>pch.cpp
1>protobuf_test.cpp
1>protobuf_test.vcxproj -> S:\Temp\msbuild\protobuf_msbuild_integration\x64\Debug\protobuf_test.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
рд╣реБрд░реНрд░реЗ!
рдЬреАрдд рдЧрдП рд╣реИрдВ! рд╕рд╣реА рд╣реИ, рд╣рдорд╛рд░реА .proto рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рд╣рдо .vcxproj.filters рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ ... <ItemGroup> <ProtobufSchema Include="test.proto"> <Filter>Resource Files</Filter> </ProtobufSchema> <ProtobufSchema Include="test2.proto"> <Filter>Resource Files</Filter> </ProtobufSchema> </ItemGroup> ...
рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ - рдлрд╛рдЗрд▓реЗрдВ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВредрд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рдзреЛрдЦрд╛ рджрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдмрд┐рд▓реНрдб рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝реЛрд▓реНрдбрд░ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред1>...\protobuf_test\protobuf.targets(13,6): error MSB3073: The command "...\ThirdParty\protobuf\bin\protoc.exe --cpp_out=.\generated test.proto" exited with code 1.
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╣рд╛рдпрдХ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдЧрд╛ред ... <Target Name="PrepareToGenerateProtobuf" Inputs="@(ProtobufSchema)" Outputs=".\generated"> <MakeDir Directories=".\generated"/> </Target> <Target Name="GenerateProtobuf" DependsOnTargets="PrepareToGenerateProtobuf" ...
DependsOnTargets GenerateProtobuf PrepareToGenerateProtobuf, @(ProtobufSchema) ProtobufSchema , , .
тАФ ! Rebuild,
1>------ Rebuild All started: Project: protobuf_test, Configuration: Debug x64 ------
1>pch.cpp
1>protobuf_test.cpp
1>protobuf_test.vcxproj -> S:\Temp\msbuild\protobuf_msbuild_integration\x64\Debug\protobuf_test.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
, ? тАФ MSBuild, . Rebuild Clean .\generated . ,
<Target Name="CleanProtobuf" AfterTargets="Clean"> <RemoveDir Directories=".\generated"/> </Target>
тАФ . Clean , Rebuild , Build .
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
C++ , Build
1>------ Build started: Project: protobuf_test, Configuration: Debug x64 ------
1>protobuf_test.cpp
1>protobuf_test.vcxproj -> S:\Temp\msbuild\protobuf_msbuild_integration\x64\Debug\protobuf_test.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
.proto- , protoc , . .proto .
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
MSBuild , UI тАФ MSBuild .pp.cc . - .cpp MSBuild , .props
1>------ Build started: Project: protobuf_test, Configuration: Debug x64 ------
1>Compiling schema test.proto
1>protobuf_test.cpp
1>protobuf_test.vcxproj -> S:\Temp\msbuild\protobuf_msbuild_integration\x64\Debug\protobuf_test.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
?
U2DCheck tlog
Visual Studio MSBuild тАж ┬л ┬╗ . U2DCheck , MSBuild . U2DCheck ┬л┬╗
U2DCheck .
U2DCheck
.tlog ред рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдордзреНрдпрд╡рд░реНрддреА-рдЖрдЙрдЯрдкреБрдЯ рдлрд╝реЛрд▓реНрдбрд░ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ_рдирд╛рдо) рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП U2DCheck рдХреЗ рд▓рд┐рдП .log рдФрд░ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрдврд╝реА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ U2DCheck рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдирд╛ рд╣реИред рд▓рд┐рдЦрдиреЗ рдХреА tlog рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВредрд╢рд╛рдк рджреЗрддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрд╛рджрди рдкрд░ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВ ... <Exec Command="$(Protoc) --cpp_out=.\generated %(ProtobufSchema.Identity)" /> <WriteLinesToFile File="$(TLogLocation)\protobuf.read.1.tlog" Lines="^%(ProtobufSchema.FullPath)" />
тАФ : .props , up-to-date. write tlog , target .
Visual Studio 2017 update 15.8 MSBuild
GetOutOfDateItems , .target- .tlog .
U2DCheck ProjectCapability
<ItemGroup> <ProjectCapability Include="NoVCDefaultBuildUpToDateCheckProvider" /> </ItemGroup>
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП MSBuild рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╕рднреА рд▓реЛрдЧ, рдФрд░ рд╣рд╛рдВ, U2DCheck рдХреЛ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ - рдпрд╣ рдЙрддрдиреА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд┐рддрдирд╛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛редрд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо .target рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВ
, . MSBuild ┬л ┬╗ , . @(SelectedFiles).
. . .
тАФ . #include- protobuf- , :). ClCompile.
protobuf.targets <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <AvailableItemName Include="ProtobufSchema"> <Targets>GenerateProtobuf</Targets> </AvailableItemName> </ItemGroup> <PropertyGroup> <ProtobufOutputFolder>.\generated</ProtobufOutputFolder> </PropertyGroup> <Target Name="ComputeProtobufInput"> <ItemGroup> <ProtobufCompilerData Include="@(ProtobufSchema)"> <OutputCppFile>$(ProtobufOutputFolder)\%(ProtobufSchema.Filename).pb.cc</OutputCppFile> <OutputPythonFile>$(ProtobufOutputFolder)\%(ProtobufSchema.Filename)_pb2.py</OutputPythonFile> <OutputFiles>%(ProtobufCompilerData.OutputCppFile);%(ProtobufCompilerData.OutputPythonFile)</OutputFiles> </ProtobufCompilerData> <ClCompile Include="%(ProtobufCompilerData.OutputCppFile)"> <PrecompiledHeader>NotUsing</PrecompiledHeader> </ClCompile> </ItemGroup> </Target> <Target Name="PrepareToGenerateProtobuf" Condition="'@(ProtobufSchema)'!=''" Inputs="@(ProtobufSchema)" Outputs="$(ProtobufOutputFolder)"> <MakeDir Directories="$(ProtobufOutputFolder)"/> </Target> <Target Name="GenerateProtobuf" DependsOnTargets="PrepareToGenerateProtobuf;ComputeProtobufInput" Inputs="%(ProtobufCompilerData.FullPath)" Outputs="%(ProtobufCompilerData.OutputFiles)" AfterTargets="PrepareForBuild" BeforeTargets="Compile"> <Message Importance="High" Text="Compiling schema %(ProtobufCompilerData.Identity)" /> <Exec Command="$(Protoc) --cpp_out=$(ProtobufOutputFolder) --python_out=$(ProtobufOutputFolder) %(ProtobufCompilerData.Identity)"> <Output ItemName="GeneratedFiles" TaskParameter="Outputs"/> </Exec> <WriteLinesToFile File="$(TLogLocation)\protobuf.read.1.tlog" Lines="^%(ProtobufCompilerData.FullPath)" /> </Target> <Target Name="CleanProtobuf" AfterTargets="Clean"> <RemoveDir Directories="$(ProtobufOutputFolder)"/> </Target> </Project>
PropertyGroup, target ComputeProtobufInput. ( ) python.
1>------ Rebuild All started: Project: protobuf_test, Configuration: Debug x64 ------ 1>Compiling schema test.proto 1>Compiling schema test2.proto 1>pch.cpp 1>protobuf_test.cpp 1>test.pb.cc 1>test2.pb.cc 1>Generating Code... 1>protobuf_test.vcxproj -> S:\Temp\msbuild\protobuf_msbuild_integration\x64\Debug\protobuf_test.exe 1>Done building project "protobuf_test.vcxproj". ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
CustomBuildStep?
, , CustomBuildStep. .props Custom Build Step

Custom Build Step

.vcxproj-
<ItemDefinitionGroup> <CustomBuildStep> <Command>$(Protoc) --cpp_out=.\generated\%(FileName).pb.cc %(FullPath)</Command> <Message>Generate protobuf files</Message> <Outputs>.\generated\%(FileName).pb.cc</Outputs> </CustomBuildStep> </ItemDefinitionGroup> <ItemGroup> ... <CustomBuild Include="test.proto"/> <CustomBuild Include="test2.proto"/> ... </ItemGroup>
Microsoft.CppCommon.targets CustomBuildStep , -, . GUI clean tlog- :). , :
- CustomBuildStep
- 1
- step .props ThirdParty , ..
- CustomBuildStep - ,
build target - . thirdparty DLL . ┬л ┬╗ xcopy Post-Build Targets. ,

Post-build steps build targets. . , ItemType=Copy

apply . .vcxproj- :
<ItemGroup> ... <ProtobufSchema Include="test2.proto" /> <CopyFileToFolders Include="resource.txt"> <DestinationFolders>$(OutDir)</DestinationFolders> </CopyFileToFolders> </ItemGroup>
┬л ┬╗, tlog-. ┬л ┬╗ Custom Build Step , тАФ () .
CopyFilesToFolder wildcards.
<CopyFileToFolders Include="$(LibFolder)\*.dll"> <DestinationFolders>$(OutDir)</DestinationFolders> </CopyFileToFolders>
CopyFileToFolders тАФ , .props- thirdparty-. , build target
Copy .
<Target Name="_CopyLog4cppDll" Inputs="$(Log4cppDll)" Outputs="$(Log4cppDllTarget)" AfterTargets="PrepareForBuild"> <Message Text="Copying log4cpp.dll..." importance="high"/> <Copy SourceFiles="$(Log4cppDll)" DestinationFiles="$(Log4cppDllTarget)" SkipUnchangedFiles="true" Retries="10" RetryDelayMilliseconds="500" /> </Target>
task- MS DownloadFile, VerifyFileHash, Unzip . Copy Retry, hard-link .
R Copy wildcards .tlog . ,
<Target Name="_PrepareToCopy"> <ItemGroup> <MyFilesToCopy Include="$(LibFolder)\*.dll"/> <MyFilesToCopy> <DestinationFile>$(TargetFolder)\%(MyFilesToCopy.Filename)%(MyFilesToCopy.Extension)</DestinationFile> </MyFilesToCopy> </ItemGroup> </Target> <Target Name="_Copy" Inputs="@(MyFilesToCopy)" Outputs="%(MyFilesToCopy.DestinationFile)" DependsOnTargets="_PrepareToCopy" AfterTargets="PrepareForBuild"> <Message Text="Copying %(MyFilesToCopy.Filename)..." importance="high" /> <Copy SourceFiles="@(MyFilesToCopy)" DestinationFolder="$(TargetFolder)" SkipUnchangedFiles="true" Retries="10" RetryDelayMilliseconds="500" /> <WriteLinesToFile File="$(TLogLocation)\mycopy.read.1.tlog" Lines="^%(MyFilesToCopy.Identity)" /> <WriteLinesToFile File="$(TLogLocation)\mycopy.write.1.tlog" Lines="^%(MyFilesToCopy.Identity);%(MyFilesToCopy.DestinationFile)" /> </Target>
CopyFileToFolders .
Level 3: GUI Visual Studio
make. XML-, , tlog-тАж - тАФ - . PropertyPageSchema .
.vcxproj Configuration Properties
$(ProtobufOutputFolder) ┬л protobuf.targets┬╗ , IDE. XAML- . , , custom_settings.xml
<?xml version="1.0" encoding="utf-8"?> <ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework"> <Rule Name="CustomProperties" PageTemplate="generic" DisplayName="My own properties"> <Rule.DataSource> <DataSource Persistence="ProjectFile"/> </Rule.DataSource> <StringProperty Name="ProtobufOutputFolder" DisplayName="Protobuf Output Directory" Description="Directory where Protobuf generated files are created." Subtype="folder"> </StringProperty> </Rule> </ProjectSchemaDefinitions>
StringProperty ┬лProtobufOutputFolder┬╗ String Subtype=Folder GUI, XML- project file. ProjectFile UserFile тАФ .vcxproj.user ( VCS) . , protobuf.targets PropertyPageSchema
<ItemGroup> <AvailableItemName Include="ProtobufSchema"> <Targets>GenerateProtobuf</Targets> </AvailableItemName> <PropertyPageSchema Include="custom_settings.xml"/> </ItemGroup>
, , project properties тАж

рд╣рд╛рдБ!
рд╣рдорд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдкреГрд╖реНрда рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ред рд╣рдо рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рджреЗрдЦреЗрдВ редvcxproj ... <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ProtobufOutputFolder>.\generated_custom</ProtobufOutputFolder> </PropertyGroup>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗрдЯ рдХрд░реЗрдВ HasConfigurationCondition = "false"ред рд╕рдЪ рд╣реИ, 2017 рдХреЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддреА рд╣реИредрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рдХрд▓реНрдк<?xml version="1.0" encoding="utf-8"?>
<Rule.DataSource>
/>
</Rule.DataSource>
<StringProperty Name="ProtobufOutputFolder"
DisplayName="Protobuf Output Directory"
Description="Directory where Protobuf generated files are created."
Subtype="folder">
<StringProperty.DataSource>
/>
</StringProperty.DataSource>
/>
. BoolProperty, StringProperty ( ┬лfolder┬╗ ┬лfile┬╗), StringListProperty, IntProperty, EnumProperty DynamicEnumProperty .vcxproj.
. . Bool
рдХреЛрдб <?xml version="1.0" encoding="utf-8"?> <ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework"> <Rule Name="CustomProperties" PageTemplate="generic" DisplayName="My own properties"> <Rule.DataSource> <DataSource Persistence="ProjectFile"/> </Rule.DataSource> <Rule.Categories> <Category Name="General" DisplayName="General"/> </Rule.Categories> <BoolProperty Name="EnableCommonPCH" Category="General" DisplayName="Enable common precompiled headers" Description="Should we use solution-wide precompiled headers instead of project-specific?"> <BoolProperty.DataSource> <DataSource HasConfigurationCondition="false" /> </BoolProperty.DataSource> </BoolProperty> <StringProperty Name="ProtobufOutputFolder" DisplayName="Protobuf Output Directory" Description="Directory where Protobuf generated files are created." Subtype="folder" Category="General"> <StringProperty.DataSource> <DataSource HasConfigurationCondition="false" /> </StringProperty.DataSource> </StringProperty> <StringProperty Name="Dummy" Visible="false" /> </Rule> </ProjectSchemaDefinitions>

, тАФ
<PropertyGroup> <EnableCommonPCH>true</EnableCommonPCH> </PropertyGroup> <PropertyGroup> <ProtobufOutputFolder>.\generated_ustom</ProtobufOutputFolder> </PropertyGroup>
protobuf- .vcxproj . .xml
<ContentType Name="Protobuf" DisplayName="Google Protobuf Schema" ItemType="ProtobufSchema" /> <ItemType Name="ProtobufSchema" DisplayName="Google Protobuf Schema" /> <FileExtension Name="*.proto" ContentType="Protobuf" />
, .proto

┬лGoogle Protobuf Schema┬╗. ┬лAdd new item┬╗, .proto- ( \ Add \ Existing itemтАж ) . ┬л ┬╗ Item type:

┬л ┬╗ ┬л ┬╗. DataSource ItemType.
<Rule Name="ProtobufProperties" PageTemplate="generic" DisplayName="Protobuf properties"> <Rule.DataSource> <DataSource Persistence="ProjectFile" ItemType="ProtobufSchema" /> </Rule.DataSource> <Rule.Categories> <Category Name="General" DisplayName="General"/> </Rule.Categories> <StringProperty Name="dllexport_decl" DisplayName="dllexport macro" Description="Add dllexport / dllimport statements controlled by #define with this name." Category="General"> </StringProperty> </Rule>

, .vcxproj
<ProtobufSchema Include="test2.proto"> <dllexport_decl Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MYLIB_EXPORT</dllexport_decl> </ProtobufSchema>
.
Level 4: MSBuild
, , : MSBuild. ┬л┬╗ , MSBuild ┬л┬╗ UsingTask.
MSBuild , DLL- - :
<UsingTask TaskName="CL" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Build.CppTasks.Common.dll" />
┬л┬╗ . DLL . UsingTask TaskFactory. TaskFactory ┬л task-┬╗ тАФ ┬л-┬╗, Task. CodeTaskFactory C# .props-.
, Qt VS Tools <UsingTask TaskName="GetItemHash" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <Item ParameterType="Microsoft.Build.Framework.ITaskItem" Required="true" /> <Keys ParameterType="System.String[]" Required="true" /> <Hash Output="true" ParameterType="System.String" /> </ParameterGroup> <Task> <Using Namespace="System"/> <Using Namespace="System.Text"/> <Using Namespace="System.IO"/> <Using Namespace="System.IO.Compression"/> <Code Type="Fragment" Language="cs"> <![CDATA[ var data = Encoding.UTF8.GetBytes(string.Concat(Keys.OrderBy(x => x) .Select(x => string.Format("[{0}={1}]", x, Item.GetMetadata(x)))) .ToUpper()); using (var dataZipped = new MemoryStream()) { using (var zip = new DeflateStream(dataZipped, CompressionLevel.Fastest)) zip.Write(data, 0, data.Length); Hash = Convert.ToBase64String(dataZipped.ToArray()); } ]]> </Code> </Task> </UsingTask>
- тАФ use-case .
. MSBuild Visual Studio . - , : .props, .targets .vcxproj MSBuild ┬л┬╗

, :).
msbuild тАФ solution .