[英]How can I write float data from a .txt file to a 2-dimensional array w/ VS2017?
[英]VS2017: How can I write per-file options in .vcxproj, without breaking the filters I've set up?
我學會了如何編輯我的.vcxproj文件來編譯/ Za和一些沒有的文件。
但是看起來,因為我在.vcxproj文件中添加元素,所以我在IDE中設置的過濾器搞砸了,而.vcxproj.filters文件變得更加混亂,三重,四重,不工作每次保存時寫入更多重復項的重復項。
如何設置編譯器選項(如/ Za)以自動應用於所有新文件,但不是某些舊文件,並且仍然有過濾器正常工作?
這是我添加到.vcxproj文件中的簡要示例:
<ItemGroup>
<CLCompile Include="**\*.cpp;" Exclude="BufferTrio.cpp;GraphicsFacade.cpp;">
<AdditionalOptions>/Za %(AdditionalOptions)</AdditionalOptions>
</CLCompile>
<CLCompile Include="BufferTrio.cpp;GraphicsFacade.cpp;">
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</CLCompile>
</ItemGroup>
<ItemGroup>
<None Include="fragmentShader.glsl" />
<None Include="vertexShader.glsl" />
</ItemGroup>
<ItemGroup>
<Text Include="Notes.txt" />
<Text Include="Todo.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="BufferTrio.h" />
<ClInclude Include="Exceptions.h" />
<ClInclude Include="FileUtils.h" />
<ClInclude Include="GraphicsFacade.h" />
</ItemGroup>
奇怪的是,這會將所有.h文件放在正確的過濾器中,但是所有過濾器之外的項目根目錄下的所有cpp / c文件。
我在IDE或.vcxproj.filters文件中所做的任何事情都不會產生差異,這不僅在下次項目保存時被覆蓋。
有兩個問題可能是導致此行為的原因。
首先,當您需要對項目構建進行細粒度控制時,我會避免使用以下模式:
<CLCompile Include="**\*.cpp;" Exclude="BufferTrio.cpp;GraphicsFacade.cpp;">
<AdditionalOptions>/Za %(AdditionalOptions)</AdditionalOptions>
</CLCompile>
<CLCompile Include="BufferTrio.cpp;GraphicsFacade.cpp;">
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</CLCompile>
當所有文件都單獨包含在內而不使用globbing **\\*.cpp
參數時,控制項目要容易得多。 我懷疑使用屬性Exclude="BufferTrio.cpp;GraphicsFacade.cpp;"
與Include="**\\*.cpp;"
在MSBuild屬性上正確解析和使用。
其次,最好創建兩個<ItemGroup></ItemGroup>
節點來獨立控制新舊文件,並向它們應用不同的編譯器標志。
第三,您可以創建顯式的<project-name>.vcxproj.filters
項目文件,其中可以使用一個文件粒度為源和頭定義過濾,即:
<?xml version="1.0" encoding="UTF-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="E:\src\ms\dotnet\coreclr-4c\src\jit\alloc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="E:\src\ms\dotnet\coreclr-4c\src\jit\assertionprop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="E:\src\ms\dotnet\coreclr-4c\src\jit\bitset.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{3E79A5A2-A53A-3F44-8869-13CB1954DF36}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>
最后,可以創建構建任務,該任務將根據文件創建或提交到repo的日期划分文件,並根據比較結果將其應用於編譯器標記,即
<CLCompile Include="BufferTrio.cpp;">
<AdditionalOptions Condition="$(BufferTrioCppCreatedDate) >= $(NumericDateTimeFlagThreshold)">%(AdditionalOptions)</AdditionalOptions>
</CLCompile>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.