Question Comment puis-je obtenir MIDL pour rechercher des répertoires include supplémentaires pour les chemins qualifiés


Mettre à jour: Un peu plus de six mois après avoir ouvert un appel de support à Microsoft, celui-ci a été rejeté. Ils affirment que ce n'est pas un bogue (puisque la documentation ne dit pas explicitement que le comportement vu n'est pas correct). Ils ont rejeté la DCR disant que, n'ayant pas entendu de plaintes au cours des 10 dernières années, il ne s'agit manifestement pas d'un cas d'utilisation courant.

Ceci est un appel aux armes, si vous avez rencontré le même problème, veuillez ouvrir un appel de support avec Microsoft afin qu’il comprenne que cela doit être corrigé. je connaître qu'au moins Quelqu'un a rencontré le même problème parce que j'ai trouvé ce commentaire dans Code source de Chrome:

# Construire des fichiers .idl.
# Ceci est un désordre total. MIDL doit être exécuté depuis $ OPEN_DIR parce que c'est trop
# stupide d'appliquer ses chemins d'inclusion à un chemin relatif comme "ui / ie / bla.idl"
# (il ne regarde que dans le répertoire courant). Donc, nous devons sauter à travers les cerceaux pour réparer
# jusqu'à notre parent comprennent les chemins d'accès et les fichiers de sortie.


Question originale: 

J'ai la structure de fichier suivante:

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

Bar.idl contient la ligne suivante:

import "first/Foo.idl";

Comment puis-je avoir midl compiler Bar.idl lors de la compilation à partir de C:\second?

Si j'ai importé Foo.idl directement (sans préciser first/) puis en spécifiant first comme un répertoire include supplémentaire serait suffisant (midl /I c:\first Bar.idl) et il trouverait Foo.idl

Alternativement si je compilé à partir de C:\ (midl second\Bar.idl) ce serait bien aussi.

Le problème est que lors de la compilation depuis l'intérieur C:\second avec la ligne de commande midl /I C:\ Bar.idl, J'obtiens l'erreur de compilation suivante:

c1: erreur irrécupérable C1083: Impossible d'ouvrir le fichier source: 'first \ Foo.idl': aucun fichier ou répertoire de ce type

Ça ressemble à midl est disposé à rechercher des chemins relatifs seulement s'ils sont relatifs au répertoire en cours et non à l'un des répertoires d'inclusion supplémentaires spécifiés et utilise les répertoires d'inclusion supplémentaires uniquement pour les noms de fichiers non qualifiés, ce comportement est spécifique au import mot-clé, en utilisant include les résultats sont comme prévu.

Je voudrais pouvoir ajouter deux répertoires d'inclusion supplémentaires différents de sorte que si j'ai le fichier sur mon ordinateur local midl va prendre cette version, sinon il faudra le fichier du serveur (donc chdiraccéder au dossier racine n’est pas une option).

Y a-t-il un moyen de contourner ceci?


10
2017-08-09 14:16


origine


Réponses:


Comme vous le remarquez, bien que cela soit stupide, le support Microsoft a confirmé que ce n’était pas un bogue. Les solutions de contournement possibles sont les suivantes.

1. Utilisez le commutateur / I. Beaucoup.

Utilisez le /I basculer pour spécifier les deux c:\first et c:\secondet spécifiez import "Foo.idl" au lieu d'un chemin relatif.

Si la ligne de commande devient trop longue, spécifiez un fichier de réponses.

2. Utiliser des liens symboliques

Utilisez des liens symboliques ou des jonctions vers les répertoires d'inclusion pour les référencer tous dans une seule hiérarchie sous un répertoire connu. Ensuite, vous pouvez utiliser des chemins relatifs à ce répertoire.

Une étape de pré-construction peut être utilisée pour conserver les liens symboliques.

MKLINK.exe peut créer des jonctions ou des liens symboliques.

3. Utilisez une étape de construction supplémentaire

Créez une étape de construction supplémentaire qui copie les fichiers requis vers des emplacements connus, puis insérez-les à partir de là.


2
2018-06-16 10:17