Обновление: Спустя более шести месяцев после открытия запроса поддержки в Microsoft он отклонен, они утверждают, что это не ошибка (так как в документации явно не указано, что поведение, t правильный). Они отклонили DCR, заявив, что, поскольку они не слышали никаких жалоб за последние 10 лет, это, очевидно, не общий вариант использования.
Это призыв к оружию, если вы столкнулись с той же проблемой, пожалуйста, откройте службу поддержки с Microsoft, чтобы они поняли, что она должна быть исправлена. Я знаю, что по крайней мере кто-то столкнулся с той же проблемой, потому что я нашел этот комментарий в исходный код Chrome:
#
Создание файлов .idl.
#
Это полный беспорядок. MIDL нужно запустить из $OPEN_DIR, потому что он тоже#
глупо применять его включенные пути к относительному пути, например, "ui/ie/bla.idl"
#
(он отображается только в текущем каталоге). Поэтому нам нужно прыгать через обручи, чтобы исправить#
вверх наши относительные включают пути и выходные файлы.
Оригинальный вопрос:
У меня есть следующая структура файла:
-
C:\first\Foo.idl
-
C:\second\Bar.idl
Где Bar.idl
содержит следующую строку:
import "first/Foo.idl";
Как я могу получить midl для компиляции Bar.idl
при компиляции из C:\second
?
Если я импортировал Foo.idl
напрямую (без указания first/
), то указать first
в качестве дополнительного каталога include будет достаточно (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 хочет искать относительные пути только в том случае, если они относятся к текущему каталогу, а не к одному из указанных дополнительных каталогов include и использует дополнительные каталоги include только для имен неквалифицированных файлов, это поведение относится к ключевому слову import
, используя include
, результаты ожидаются.
Я хотел бы иметь возможность добавить два разных дополнительных каталога include, чтобы, если у меня есть файл на моем локальном компьютере midl, он примет эту версию, в противном случае он возьмет файл с сервера ( поэтому chdir
в корневую папку не является вариантом).
Есть ли способ обойти это?