MIDL 为 /env win32 和 /env win64 生成相同的文件
在 Visual Studio 中,当您编译 foo.idl 时,MIDL 会在 foo_p.c 中生成代理信息。
不幸的是,对于 Win32 和 x64 文件,它使用相同的文件名。 对于 Win32,文件开头为:
#if !defined(_M_IA64) && !defined(_M_AMD64)
对于 x64,文件开头为:
#if defined(_M_AMD64)
当您为 Win32 构建然后立即为 x64 构建时,它不会替换 foo_p.c 文件,这意味着项目无法链接。
我尝试有一个预构建事件,如果它适用于错误的体系结构,则删除 foo_p.c 文件,但 VS 甚至懒得运行该步骤。
我应该如何获取它以便我可以构建一种配置,然后构建另一种配置?
In Visual Studio, when you compile foo.idl, MIDL generates the proxy information in foo_p.c.
Unfortunately, for Win32 and x64 files, it uses the same filename. For Win32, the file starts with:
#if !defined(_M_IA64) && !defined(_M_AMD64)
For x64, the file starts with:
#if defined(_M_AMD64)
When you build for Win32 and then immediately build for x64, it doesn't replace the foo_p.c file, meaning that the project fails to link.
I tried having a pre-build event that deletes the foo_p.c file if it's for the wrong architecture, but VS doesn't even bother to run that step.
How should I get it so that I can build one configuration and then the other?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以修改 IDL 文件的编译器设置,以根据目标平台为输出代理文件指定不同的文件名。 (选择 IDL 文件上的“属性”,然后选择“配置属性”/“MIDL”/“输出”)。
foo_p_w32.c
foo_p_x64.c
然后,在 Win32 项目设置中,排除文件
foo_p_x64.c
> 对于 x64 项目反之亦然。您需要对 _i.c 文件执行相同的操作,否则 Visual Studio 似乎根本不会重建 IDL。
You could modify the compiler settings for your IDL file to specify a different file name for the output proxy file according to the target platform. (Select Properties on the IDL file, then Configuration Properties / MIDL / Output).
foo_p_w32.c
foo_p_x64.c
Then, in your Win32 project settings, exclude the file
foo_p_x64.c
and vice versa for the x64 project.You need to do the same for the _i.c file, otherwise Visual Studio doesn't seem to rebuild the IDL at all.
以下是我们用来允许自动构建干净地工作的配置
更改更改
为
并将 $(SolutionDir)$(PlatformName) 添加到您的 C++ 附加包含目录
,例如
Here are the configuration changes we use to allow automated builds to work cleanly
Change
To
and add $(SolutionDir)$(PlatformName) to your C++ Additional Include Directories
e.g.