6
votes

Le compilateur Visual Studio C a-t-il équivalent à GCC'S -M?

J'aimerais générer automatiquement une liste de dépendances de Makefile, mais j'utilise Visual Studio 2005. Si j'avais l'aide de GCC, je pourrais passer -m (ou l'une des nombreuses variantes) pour créer cette liste de dépendance.

Recherche par les options de ligne de commande sur CL.EXE , je ne vois rien d'évident. Je peux supporter de peaufiner la sortie avec post-traitement, mais plus le plus proche.


0 commentaires

5 Réponses :


0
votes

Pas directement avec Cl.exe, mais avec cet emballage, vous pouvez obtenir ce que vous recherchez:

http://msdn.microsoft.com/en-us/library /y209k0z6.aspx


2 commentaires

Est-ce que cela fonctionne avec le drapeau -M de GCC? La plupart des mappages de drapeau du compilateur seraient triviaux, mais celui-ci nécessite un pré-processeur (ou quelque chose comme ça).


Le compilateur VC ++ a une option de prétraitement uniquement, mais cela ne fera pas cela. Le -M. * Paramètres que l'OP veut faire partie des personnes non prises en charge par ce package. Voir le bas de ccfile.cfg , si vous l'avez installé ou Pastebin.com/m1707AA02 < / a>



3
votes

Je devais faire face à ce problème exact. Nous voulions ajouter un script qui remplace l'option -m. Voici comment je l'ai fait:

  1. Trouver un préprocesseur source (et les chemins inclus et définit votre besoin)
  2. exécutez-le sur le fichier dont vous avez besoin et qu'il devrait produire une version prétraitée.
  3. La plupart des préprocesseurs ont un commutateur qui permet des informations supplémentaires (telles que le fichier lorsque certains extraits de code sont venus de)
  4. Écrivez un script simple pour extraire tous les noms d'en-tête
  5. Créez un ensemble d'entre eux, de sorte que vous filtrez des doublons.

    C'est comme ça que je l'ai fait et ça a fonctionné. Bonne chance!


3 commentaires

Vous pouvez utiliser Visual Studio pour cette tâche. Un très joli préprocesseur autonome est MCPP . Vous pouvez le trouver ici http://mcpp.sourceforge.net/ .


Je ne l'ai pas encore impliqué, mais cela semble être la meilleure solution. L'utilisation de Visual Studio sonne comme le chemin correct et évite de devoir avoir des ensembles de drapeaux séparés pour passer (une pour les dépendances et une autre pour la construction).


Pas besoin d'écrire quoi que ce soit, plus. MCPP a tout ce dont vous avez besoin. Vous pouvez simplement l'appeler après avoir compilé vos sources avec les drapeaux habituels GCC prendraient également E.G -MMD -MP .



0
votes

Nous avons eu le même problème avec Fortran et nous avons fini par avoir à écrire notre propre mini-compilateur pour analyser le code source et traverser tout le #includes .


1 commentaires

Combien de temps avez-vous eu à faire cela?



5
votes

Dans le CL.EXE de Visual Studio 2005 au moins, il y a l'option / showincllues .


0 commentaires

2
votes

Le compilateur stocke les dépendances dans le fichier .Idb intermédiaire. Vous pourriez être capable de l'analyser à partir de là.

voir https://msdn.microsoft.com/en-us/ Bibliothèque / kfz8ad09.aspx

Vous pouvez trouver tous les fichiers inclus préfixés avec "/ mr / inversedeps /" ou "/ ipm / en-tête /" là-bas, semble-t-il.


Je pense que vous devriez également trouver des dépendances dans d'autres fichiers intermédiaires, par ex. "Cl.read.1.tlog".


0 commentaires