我想有一个条件编译符号列表,也许是一个表格,其中每个符号都有一个复选框,然后在构建时,编译中只包含“开启”的符号。除了在每次编译之前以编程方式更改项目文件之外,是否还有任何方法可以执动态设置条件编译符号
回答
首先,我假设这个答案是你想从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. msbuild,定义条件编译符号
- 2. 未定义条件编译符号
- 3. 如何设置条件编译变量?
- 4. AppHarbor可以在构建过程中设置一个条件编译符号吗?
- 5. 动态字符串编译
- 6. 动态设置Where条件查询
- 7. 如何在编译ELF二进制文件时设置符号的段号?
- 8. jqgrid设置单元格可动态编辑假条件
- 9. 在C#中编译时间检查条件编译符号(请参阅示例)?
- 10. 为动态编译的程序集加载符号
- 11. 在类库中使用条件编译符号
- 12. 如何有条件地引用基于编译符号的DLL?
- 13. 可以在T4模板中使用条件编译符号
- 14. 是否可以在运行时禁用条件编译符号?
- 15. 根据条件编译符号更改exe的名称
- 16. 是否可以使用条件编译来设置静态常量?
- 17. C中缺少符号编译错误基本头文件设置
- 18. MVC编译设置
- 19. FlashDevelop编译设置
- 20. Spring Boot条件编译/配置
- 21. Asp.net动态编译
- 22. Asmx动态编译
- 23. GWT条件编译
- 24. MSBuild条件编译
- 25. gcc条件编译
- 26. 条件JIT编译
- 27. 动态编译和执行条件语句
- 28. Kext编译好符号undefined
- 29. 如何编写自定义FXCop规则来检查条件编译符号?
- 30. 动态更新的Kivy设置条目
你想从VS构建或更确切地说是调用MSBuild(通过命令行)吗? – Filburt 2011-04-19 10:36:00