如何让MIDL搜索合格路径的其他包含目录

Mot*_*tti 10 relative-path midl include-path

更新:在打开微软支持电话后的六个月内,它被拒绝,他们声称这不是一个错误(因为文档没有明确说明所看到的行为不正确).他们拒绝DCR说,由于他们在过去十年没有听到任何投诉,这显然不是一个常见的用例.

这是对武器的呼吁,如果您遇到同样的问题,请打开与Microsoft的支持电话,以便他们了解应该修复它.我知道至少有人遇到了同样的问题,因为我在Chrome的源代码中发现了这条评论:

#构建.idl文件.
#这是一团糟.MIDL需要从$ OPEN_DIR运行,因为
#将其包含路径应​​用到像"ui/ie/bla.idl"这样的相对路径
#(它只查看当前目录)太愚蠢了.所以我们必须跳过箍来修复
#我们的相对包含路径和输出文件.


原始问题:

我有以下文件结构:

  • C:\first\Foo.idl
  • C:\second\Bar.idl

其中Bar.idl包含以下行:

import "first/Foo.idl";
Run Code Online (Sandbox Code Playgroud)

如何从编译时获得midl编译?Bar.idlC:\second

如果我Foo.idl直接导入(没有指定first/),那么指定first为一个额外的包含目录就足够了(midl /I c:\first Bar.idl)并且它会找到Foo.idl

或者,如果我从C:\(midl second\Bar.idl)编译也可以.

问题是,当C:\second使用命令行从内部编译时midl /I C:\ Bar.idl,我得到以下编译错误:

c1:致命错误C1083:无法打开源文件:'first\Foo.idl':没有这样的文件或目录

看起来midl只是在相对于当前目录而不是指定的其他包含目录之一时才愿意搜索相对路径,并且仅对非限定文件名使用其他包含目录,此行为特定于import关键字,使用include结果如预期.

我希望能够添加两个不同的附加包含目录,这样如果我在本地计算机上有文件midl将采用该版本,否则它将从服务器获取文件(因此chdir转到根文件夹不是一个选项).

有办法解决这个问题吗?

Ben*_*Ben 2

正如您所注意到的,虽然这很愚蠢,但 Microsoft 支持已确认这不是一个错误。以下是可能的解决方法。

1. 使用/I 开关。很多。

使用/I开关指定 和c:\firstc:\second并指定import "Foo.idl"而不是相对路径。

如果命令行变得太长,请指定响应文件。

2.使用符号链接

使用包含目录的符号链接或联结将它们全部引用到已知目录下的单个层次结构中。然后您可以使用相对于该目录的路径。

预构建步骤可用于维护符号链接。

MKLINK.exe 可以创建连接或符号链接。

3. 使用额外的构建步骤

创建一个额外的构建步骤,将所需的文件复制到已知位置,然后从那里导入它们。