2009-11-23 6 views
6

Je voudrais générer automatiquement une liste de dépendance Makefile, mais j'utilise Visual Studio 2005. Si j'utilisais GCC, je pourrais passer -M (ou l'une des nombreuses variantes) pour créer cette liste de dépendances.Est-ce que le compilateur Visual Studio C a un équivalent à -M?

En regardant les options de la ligne de commande à cl.exe, je ne vois rien d'évident. Je peux gérer la modification de la sortie avec le post-traitement, mais le plus proche sera le mieux.

Répondre

3

je devais régler 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 d'& vous définit besoin)
  2. exécuter sur le fichier dont vous avez besoin, et il devrait produire une version prétraité.
  3. la plupart des pré-processeurs ont un commutateur qui permet d 'info (par exemple le fichier où certains extrait de code est venu de)
  4. écrire un script simple pour extraire tous les noms d'en-tête
  5. créer un ensemble d'eux, de sorte que vous filtrer les doublons.

C'est ainsi que je l'ai fait, et cela a fonctionné. Bonne chance!

+0

Des pointeurs vers quel préprocesseur (s) vous avez utilisé? – Shepmaster

+2

Vous pouvez utiliser Visual Studio pour cette tâche. Un préprocesseur autonome plutôt sympa est 'mcpp'. Vous pouvez le trouver ici 'http: // mcpp.sourceforge.net /'. – Geo

+0

Je ne l'ai pas encore implémenté, mais cela me semble être la meilleure solution. L'utilisation de Visual Studio sonne comme le bon chemin et évite d'avoir à passer des ensembles de drapeaux distincts (un pour les dépendances et un autre pour la construction). – Shepmaster

0

Pas directement avec cl.exe, mais avec cette enveloppe, vous pouvez réaliser ce que vous cherchez:

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

+0

Est-ce que cela fonctionne avec le drapeau '-M' de gcc? La plupart des mappages de drapeaux de compilateur sont triviaux, mais celui-ci nécessite à peu près le pré-processeur (ou quelque chose comme ça) pour fonctionner. –

+0

Le compilateur VC++ dispose d'une option de pré-traitement uniquement, mais il ne le fera pas. Les paramètres '-M. *' Que l'OP désire sont parmi ceux qui ne sont pas supportés par ce paquet. Voir le bas de 'ccFile.cfg', si vous l'avez installé, ou http://pastebin.com/m1707aa02 –

0

Nous avons eu exactement le même problème avec Fortran, et avons fini par devoir écrire notre propre mini-compilateur pour analyser le code source et traverser tous les #includes.

+0

combien de temps aviez-vous pour cela? – Geo

5

Dans le cl.exe de Visual Studio 2005 au moins, il existe l'option /showIncludes.

2

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

Voir https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx

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


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