J'essaie d'importer la source d'une application c ++ existante dans Visual Studio pour tirer parti de certains outils MS spécifiques. Cependant, après avoir recherché en ligne et joué avec Visual Studio, je n'arrive pas à trouver un moyen facile d'importer du code source c ++ existant dans Visual Studio et de le conserver structurellement intact.
La capacité d'importation que j'ai trouvée aplatit les répertoires et les met tous dans un seul projet. Suis-je en train de manquer quelque chose?
(Il s'agit de C++ non managé et contient des versions spécifiques pour win/unix)
Je ne connais aucune solution générale sous les contraintes données - avoir spécifiquement à créer de nombreux projets à partir d'un arbre source.
La meilleure option que je vois est en fait de créer les fichiers de projet par un script.
Une méthode très simple consiste à classer la liste, le nom du projet, etc. avec des "jetons étranges" et à les remplir avec votre générateur. Si vous voulez être le bon gars, vous pouvez bien sûr utiliser une bibliothèque de gestion XML.
Notre expérience: En fait, nous ne stockons plus les fichiers .vcproj et .sln dans le référentiel (git), mais un script python qui les régénère à partir du l'arborescence source, ainsi que les "modèles de feuille de propriétés" VS 2008 (ou tout autre nom). Cela aide beaucoup à effectuer des ajustements généraux.
Le script de génération de projet contient des informations sur toutes les spécialités des projets (par exemple, utilisent-ils MFC/ATL, va-t-il créer DLL ou un EXE, fichiers à exclure).
De plus, ce script contient également des dépendances, qui alimentent le script de construction réel.
Cela fonctionne assez bien, les problèmes sont mineurs: python requis dans les systèmes de build, sans oublier de re-gen les fichiers du projet, moi d'avoir à en apprendre python apporter des ajustements à certains projets.
@Michael Burr "Quelle est la complexité des scripts python et les" modèles "de support dont vous pourriez avoir besoin?"
Honnêtement, je ne peux pas le dire, car j'ai confié la tâche à un autre développeur (qui a choisi python). La tâche d'origine était de fournir un script de construction, car la construction de la solution VS2008 n'était pas assez bonne pour nos besoins, et l'ancien fichier de commandes ne prenait pas en charge la parallélisation. .vcproj
la génération a été ajoutée ultérieurement. Si je comprends bien, son script génère les fichiers .vcproj et .sln à partir de zéro, mais extrait tous les paramètres de feuilles de propriétés distinctes.
Avantages:
Ajout de nouvelles configurations à la volée. Certains des projets avaient déjà six configurations, et la planification de la prise en charge unicode signifiait envisager de les doubler pendant un certain temps. Certains outils maladroits se construisent toujours en MBCS, donc certaines bibliothèques ont maintenant 8 configurations. Configurer cela de la main est une douleur, maintenant ça ne me dérange plus.
Changements globaux, par exemple se déplacer dans les chemins de projet relatifs, le dossier des fichiers temporaires et des binaires finaux jusqu'à ce que nous trouvions une solution qui nous plaise
Construisez la stabilité. La fusion des fichiers de projet VC6 était une source notable d'erreurs pour diverses raisons, et les fichiers de projet VC9 n'étaient pas meilleurs. Maintenant, les choses semblent mieux isolées: compiler/lier les paramètres dans les feuilles de propriétés, gérer les fichiers dans le script. En outre, le script répertorie principalement les variations de notre version par défaut , se terminant plus facilement à lire qu'un fichier de projet.
Généralement: je ne vois pas un gros avantage quand vos projets sont déjà montés, ils sont plutôt stables, et vous n'avez pas de vrais problèmes. Cependant, lors du passage dans l'inconnu (pour nous: principalement les versions VC6 -> VC9 et Unicode), la flexibilité a considérablement réduit le risque d'expériences.
Sans projet/solution chargé, dans Visual Studio 2005, je vois cet élément de menu:
Fichier> Nouveau projet à partir du code existant ...
Après avoir suivi l'assistant, mon problème est résolu!
La commutation du bouton "Afficher tous les fichiers" affiche la hiérarchie complète avec tous les répertoires et fichiers à l'intérieur.
Si l'option Nouveau projet à partir du code existant ... n'est pas disponible, vous devrez l'ajouter dans Outils> Personnaliser ...
Créez une nouvelle solution vide et ajoutez-y votre code source.
Par exemple,
Fichier> Nouveau> Projet ... Visual C++> Win32> Paramètres d'application de l'application console Win32> - Décochez "En-tête précompilé" - Cochez "Projet vide"
Le projet est alors créé. Pour ajouter du code existant:
Projet> Ajouter un élément existant ...> - Sélectionnez le ou les fichiers à ajouter
Recompilez, c'est fait!
Je sais que cette question est déjà marquée comme correcte, mais j'ai pu importer du code existant dans un projet avec Visual Studio 2008 en faisant "Fichier" -> "Nouveau projet à partir du code existant". La structure de répertoires de mon code a été conservée.
Dans l '"Explorateur de solutions", vous pouvez cliquer sur le bouton "Afficher tous les fichiers" pour que Visual Studio affiche les fichiers tels qu'ils existent sur le système de fichiers (répertoires et tous).
À mon avis, il s'agit d'une solution de contournement imparfaite, mais je pense que c'est la meilleure solution disponible. Je ne suis pas au courant d'un plug-in, d'une macro ou d'un autre outil qui importera un répertoire dans un projet réel avec des dossiers qui reflètent le système de fichiers.
Vous pouvez toujours changer de vue depuis le menu du projet
Par exemple. Projet-> Afficher tous les fichiers
Ce qui précède affichera les fichiers dans l'ordre du système de fichiers bruts non formaté
Pas sûr des anciennes versions mais cela fonctionne sur VS 2010
Je vous comprends, j'ai le même problème: de nombreux fichiers .cpp et .h organisés dans de nombreux dossiers et sous-dossiers avec des chemins d'inclusion écrits pour cette structure de dossiers. La seule façon que vous pouvez faire pour importer cette structure de dossiers avec les fichiers source est d'utiliser "Afficher tous les fichiers" puis de cliquer avec le bouton droit sur les dossiers et de sélectionner "Importer dans le projet". Cela fonctionne pour moi lorsque j'utilise des projets C-Sharp. Mais cela ne fonctionne pas pour mes projets C++. Je cherche toujours une solution ...