Обновление: Через шесть месяцев после открытия обращения в службу поддержки Microsoft оно было отклонено, они утверждают, что это не ошибка (поскольку в документации явно не говорится, что наблюдаемое поведение не является правильный). Они отклонили 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
в качестве дополнительного каталога включения (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
вход в корневую папку невозможен).
Есть ли способ обойти это?