我想有一個條件編譯符號列表,也許是一個表格,其中每個符號都有一個複選框,然後在構建時,編譯中只包含「開啓」的符號。除了在每次編譯之前以編程方式更改項目文件之外,是否還有任何方法可以執動態設置條件編譯符號
回答
首先,我假設這個答案是你想從Visual Studio IDE和你編譯C++項目。
您可以通過將屬性頁面添加到項目中來指定所有這些編譯符號。屬性頁面以非常小的努力爲您提供了UI。當用戶編輯屬性頁面時,數據存儲在項目文件或用戶文件中的項目/屬性中。 您還需要添加一個自定義任務,它將實際採用由屬性頁存儲的數據並在編譯文件時應用它。
所以這裏有更多的一些細節:
導入你的目標,從項目的文件中。編輯.vcxproj並在末尾添加(例如,封閉元件
</Project>
之前)是這樣的:
<Import Project="$(ProjectDir)MyTargets.xml" />
撰寫MyTargets.xml文件。它應該導入屬性頁面並定義自定義目標。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema Include="$(ProjectDir)MyProperties.xml"/>
</ItemGroup>
<Target Name="AddMySymbols"
Inputs="@ClCompile"
Outputs="__non_existent_outputs__"
BeforeTargets="ClCompile">
<ItemGroup>
<ClCompile Include="@ClCompile">
<PreprocessorDefinitions Condition="'$(MY_SYMBOL)'='true'">MY_SYMBOL; %(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemGroup>
</Target>
</Project>
AddMySymbols目標編譯每一個文件之前執行。對於每個文件,如果名爲「MY_SYMBOL」的屬性爲真,我們將MY_SYMBOL添加到PreprocessorDefinitions。
- 撰寫MyProperties.xml文件。該文件由Visual Studio用於顯示屬性頁面UI。它將允許用戶將MY_SYMBOL屬性設置爲true/false。 這裏是MyProperties.xml的例子:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties">
<Rule Name="Symbols" PageTemplate="tool" DisplayName="Symbols" SwitchPrefix="/" Order="1" xmlns="http://schemas.microsoft.com/build/2009/properties" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Rule.Categories>
<Category Name="MySymbols">
<Category.DisplayName>
<sys:String>My Symbols</sys:String>
</Category.DisplayName>
</Category>
</Rule.Categories>
<Rule.DataSource>
<DataSource Persistence="ProjectFile" ItemType="" HasConfigurationCondition="false" />
</Rule.DataSource>
<BoolProperty
Name="MY_SYMBOL"
Category="MySymbols"
DisplayName="MY_SYMBOL"
Description="When enabled, MY_SYMBOL will be added to preprocessor symbols when compiling C/C++ files."/>
</ProjectSchemaDefinitions>
的ItemType是「」,這樣MY_SYMBOL將作爲屬性,而不是作爲一個項目被保存在項目文件。你可以用不同的方式安排它,而是使用項目。 如果您想符號爲每個用戶保存,你可以通過改變數據源將其保存到用戶文件<DataSource Persistence="UserFile" ItemType="" HasConfigurationCondition="false" />
這裏是some explanations about property pages的鏈接。
埃米爾
我正在編譯一個C#項目,但是謝謝,這是一個讓我開始的好回答。 – ProfK 2011-04-25 14:52:22
- 1. 未定義條件編譯符號
- 2. msbuild,定義條件編譯符號
- 3. 如何設置條件編譯變量?
- 4. AppHarbor可以在構建過程中設置一個條件編譯符號嗎?
- 5. 「if」中的動態條件符號
- 6. 動態字符串編譯
- 7. 動態設置Where條件查詢
- 8. 如何在編譯ELF二進制文件時設置符號的段號?
- 9. jqgrid設置單元格可動態編輯假條件
- 10. 在C#中編譯時間檢查條件編譯符號(請參閱示例)?
- 11. $編譯動態組件
- 12. 條件編譯
- 13. 編譯器錯誤,設置顏色時找不到符號
- 14. MS Visual Studio中是否存在內置的條件編譯符號?
- 15. .NET條件編譯符號和單元測試庫
- 16. 根據條件編譯符號更改exe的名稱
- 17. 可以在T4模板中使用條件編譯符號
- 18. 在類庫中使用條件編譯符號
- 19. 是否可以在運行時禁用條件編譯符號?
- 20. 如何有條件地引用基於編譯符號的DLL?
- 21. 是否有條件編譯符號可以破解
- 22. 爲動態編譯的程序集加載符號
- 23. 是否可以使用條件編譯來設置靜態常量?
- 24. FlashDevelop編譯設置
- 25. MVC編譯設置
- 26. Spring Boot條件編譯/配置
- 27. C中缺少符號編譯錯誤基本頭文件設置
- 28. 條件JIT編譯
- 29. Golang條件編譯
- 30. GWT條件編譯
你想從VS構建或更確切地說是調用MSBuild(通過命令行)嗎? – Filburt 2011-04-19 10:36:00