Tôi có một kịch bản msbuild tôi đã viết để biên dịch Google file Nghị định thư Buffers: (! Yay)Làm thế nào để sửa đổi một ItemDefinitionGroup từ một mục tiêu MSBuild?
<ItemGroup>
<ProtocolBuffer Include="Whitelist.proto" />
<ProtocolBuffer Include="Whitelist2.proto" />
</ItemGroup>
<ItemDefinitionGroup>
<ProtocolBuffer>
<ProtoPath>$(ProjectDir)</ProtoPath>
</ProtocolBuffer>
</ItemDefinitionGroup>
<PropertyGroup>
<ProtoC>$([System.IO.Path]::GetFullPath($(ProjectDir)..\ThirdParty\protobuf-2.4.1\protoc.exe))</ProtoC>
<ProtoOutPath>$(IntDir)CompiledProtocolBuffers</ProtoOutPath>
</PropertyGroup>
<Target Name="CompileProtocolBuffers"
BeforeTargets="ClCompile"
Inputs="@(ProtocolBuffer)"
Outputs="@(ProtocolBuffer->'$(ProtoOutPath)\%(FileName).pb.cc');@(ProtocolBuffer->'$(ProtoOutPath)\%(FileName).pb.h')">
<MakeDir Directories="$(ProtoOutPath)" />
<Exec
Command=""$(ProtoC)" --proto_path="$([System.IO.Path]::GetDirectoryName(%(ProtocolBuffer.ProtoPath)))" --cpp_out="$(ProtoOutPath)" "%(ProtocolBuffer.FullPath)" --error_format=msvs"
/>
<ItemGroup>
<ClInclude Include="$(ProtoOutPath)\%(ProtocolBuffer.FileName).pb.h" />
<ClCompile Include="$(ProtoOutPath)\%(ProtocolBuffer.FileName).pb.cc">
<AdditionalIncludeDirectories>$(MSBuildThisDirectory)..\ThirdParty\protobuf-2.4.1\src</AdditionalIncludeDirectories>
<PrecompiledHeader></PrecompiledHeader>
<DisableSpecificWarnings>4244;4276;4018;4355;4800;4251;4996;4146;4305</DisableSpecificWarnings>
<PreprocessorDefinitions>GOOGLE_PROTOBUF_NO_RTTI</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
</ItemGroup>
</Target>
này biên dịch tập tin vùng đệm giao thức một cách hoàn hảo, và thêm chúng vào đầu vào của trình biên dịch. Tuy nhiên, các tệp nguồn khác của tôi muốn bao gồm các tệp .pb.h
cần phải biết nơi các tệp này được tạo - vị trí thế hệ đó cần được đặt trên đường dẫn bao gồm.
Do đó, nếu và chỉ nếu người dùng đã bao gồm một mục <ProtocolBuffer
nơi nào đó trong kịch bản của họ, tôi muốn thêm vị trí thế hệ (trong trường hợp này $(ProtoOutPath)
để ClCompile của <AdditionalIncludeDirectories>
.
Là có thể hay tôi cần phải tạo các tệp .cpp muốn sử dụng các bit được tạo ra này nhảy qua hoops?
tôi đã phải đối mặt với cùng một vấn đề (mặc dù thiết lập 'PreprocessorDefinitions' lập trình thay vì ' AdditionalIncludeDirectories'). Thánh bò này là ma thuật, nhưng nó hoạt động khá tốt. Cảm ơn! –