Обновление: Чуть спустя более чем шесть месяцев после открытия обращения за поддержкой к Microsoft это было отклонено, они утверждают, что это не ошибка (так как в документации явно не говорится, что замеченное поведение не является корректным). Они отклонили DCR, говорящий что, так как они не услышали жалоб за прошлые 10 лет, это - очевидно, не случай общего использования.
Это - призыв к оружию при столкновении с той же проблемой откройте обращение за поддержкой с Microsoft, таким образом, они понимают, что это должно быть зафиксировано. Я знаю, что по крайней мере кто-то столкнулся с той же проблемой becasue, я нашел этот комментарий в исходном коде Chrome:
#
Здание .idl файлы.#
Это - общая путаница. MIDL должен быть выполнен от $OPEN_DIR, потому что это также#
глупый применить включать пути к относительному пути как "ui/ie/bla.idl"#
(это только смотрит в текущем dir). Таким образом, мы должны перейти через обручи для фиксации#
наш родственник включает пути и выходные файлы.
Исходный вопрос:
У меня есть следующая файловая структура:
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
луг к корневой папке не является опцией).
Существует ли способ обойти это?