Visual studio 2010 在VC++2010中将消息编译器(mc.exe)配置为自定义编译器步骤?
有人能列出在VC++2010中将消息编译器mc.exe配置为将.mc文件编译成.rc文件作为自定义编译器步骤的具体和详细步骤吗?Visual studio 2010 在VC++2010中将消息编译器(mc.exe)配置为自定义编译器步骤?,visual-studio-2010,Visual Studio 2010,有人能列出在VC++2010中将消息编译器mc.exe配置为将.mc文件编译成.rc文件作为自定义编译器步骤的具体和详细步骤吗? 我真的不知道该怎么做。右键单击项目,添加+新项目,选择文本文件,将其命名为Blah.mc。输入或粘贴定义。右键单击Blah.mc、属性、自定义生成步骤: 命令行=mc$InputPath 输出=$InputName.rc 编辑.rc文件,添加: #include "Blah.rc" 为我工作,应该很接近。如果要使用自定义生成规则,可以这样做 在Visual Stud
我真的不知道该怎么做。右键单击项目,添加+新项目,选择文本文件,将其命名为Blah.mc。输入或粘贴定义。右键单击Blah.mc、属性、自定义生成步骤: 命令行=mc$InputPath 输出=$InputName.rc 编辑.rc文件,添加:
#include "Blah.rc"
为我工作,应该很接近。如果要使用自定义生成规则,可以这样做 在Visual Studio中的项目上单击鼠标右键->自定义生成规则 单击新建规则文件并填写字段,我将此规则文件用于MC.EXE
<VisualStudioToolFile Name="Message Table Build Rule" Version="8.00">
<Rules>
<CustomBuildRule
Name="Message Table Build Rule"
DisplayName="Message Table Build Rule"
CommandLine="[Location]\mc.exe [Unicode] [Verbose] [Inputs]"
Outputs="Message Table Build Rule"
FileExtensions="*.mc"
ExecutionDescription="Message Table Build Rule"
>
<Properties>
<BooleanProperty
Name="Verbose"
DisplayName="Verbose mode"
Description="Foo."
Switch="-v"
/>
<BooleanProperty
Name="Unicode"
DisplayName="Unicode mode"
Description="Bar."
Switch="-u"
/>
<StringProperty
Name="Location"
DisplayName="Location"
Description="Baz."
Switch="[value]"
DefaultValue="C:\Bin\Psdk\Bin"
/>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>
汉斯·帕桑几乎说对了。不幸的是,$InputPath和$InputName没有在VS2010中定义。而是创建您的消息文件: 右键单击项目->添加->新建项目 选择Text File.txt,但将其命名为.mc文件,如messages.mc 创建一个资源文件,比如resources.rc 编辑资源文件,使其仅包含一行: include messages.rc 该文件将由消息编译器生成。现在添加自定义生成步骤以运行消息编译器: 右键单击messages.mc并选择属性。 在“属性”对话框中,将“配置”设置为“所有配置”。 在“配置属性”下,单击“常规”。 确保“从生成中排除”属性设置为“否”。 从下拉菜单中将“项目类型”属性设置为“自定义生成工具”,然后单击“应用”按钮,以便显示“自定义生成工具”属性。 单击“自定义生成工具”属性下的“常规”。 将命令行属性设置为: mc%完整路径 将Description属性设置为类似于编译消息的内容 将“输出”属性设置为: %Filename.rc;%文件名.h;MSG0409.bin MSG00409.bin文件来自messages.mc中的以下行: LanguageNames=English=0x409:MSG00409 添加到messages.mc的每种语言都可以有一个bin文件。在输出中列出它们的好处在于,在清理项目时,它们将被删除 我唯一不确定的是设置Execute Before属性以保证messages.rc在resource.rc编译之前生成。我不必设置它,但是如果您发现资源编译器试图在消息编译器之前执行,则必须设置此属性。messages.mc文件已禁用该选项,但可以在项目的自定义生成步骤属性中设置该选项。如果不需要自定义编译器,则需要了解如何从MSBuild生成.rc文件。 提供了与MSBuild的这种集成
<ItemGroup>
<MessageCompile Include="a.mc">
<GenerateBaselineResource>true</GenerateBaselineResource>
<BaselineResourcePath>c:\test\</BaselineResourcePath>
</MessageCompile>
</ItemGroup>
在Visual Studio 2017中,您可以执行以下操作: 打开项目的.vcxproj文件,然后在ItemDefinitionGroup中添加以下行:
<CustomBuildStep>
<Command>mc "$(InputDir)\$(InputName).mc" -r "$(InputDir)\res" -h "$(InputDir)"</Command>
</CustomBuildStep>
这将在指定的构建文件夹中生成3个文件.h、.rc和.res-look,但您的意思是:命令行=mc$InputName.mc输出=$InputName.rc$不管怎么说,这都会导致错误:mc:error:0x2试图打开文件。好的,我开始认为存在更大的问题。我创建了一个TextFile.txt,然后配置为:命令行=echo-InputDir=$InputDir-InputName=$InputName>TextOut.txt-Outputs=TextOut.txt不包含$xxx宏扩展。看起来不对。不确定你在做什么。请确保文件扩展名为.mc,而不是.txt谢谢您的帮助。宏名称$InputName,$InputPath在自定义生成步骤中为空。mc.exe失败,未声明任何参数。在上面的回显测试中,我尝试将宏扩展回显到一个文件中,但在那里也是空白的。这可能是一个错误吗?如果您的项目已经有一个.rc文件,您可以简单地将11 msg0049.bin添加到其中。bin文件的用途是什么?如果在FullPath中有空格,则使用mc%FullPath。其中有一个输入错误,依赖项中应该是msg0049.bin,它缺少一个0。我看到一个项目复制了这个确切的信息,并因此一直在重建所有步骤。您是否也知道如何在Visual Studio 2017中执行此操作?您还可以添加一个预构建事件步骤:只需在命令行中为:mc-a LogMsgs.mc-r写入以下内容。\Res-h。