2010-07-21 6 views
11

Nous avons un pas très compliqué mais grand (à savoir beaucoup de fichiers) Visual Studio C++ Win32 Console écrit en C++ 0x standard dans VS2010. Il n'utilise aucun code non standard ou quoi que ce soit (heureusement!).Port Visual Studio C++ pour Linux

Je veux maintenant le porter sous Linux. Quelle est la manière la plus rapide de le faire? autoconf? démodé faire un fichier? une autre solution?

+0

Ai-je raté quelque chose? C++ 0x est une norme * proposée * dernière que j'ai entendue et cela signifie que votre code ** est ** non standard s'il est écrit en utilisant des fonctionnalités de cela. –

+0

réellement C++ 0x est le nom officieux du nouveau standard prévu pour le langage de programmation C++. – MBZ

+0

Est-ce que * prévu * par rapport à * proposé * signifie une différence dans l'état de ratification? Je me méfie d'écrire du code sur n'importe quoi jusqu'à ce que ce soit ** la norme. –

Répondre

7

J'utiliserais make normal mais je garderais le plus simple possible avec les règles par défaut. Ajoutez des dépendances au fur et à mesure. Comme pour l'étape intermédiaire, construisez-le avec mingw afin d'éviter tout problème de portage de l'API jusqu'à ce que vous ayez un build fonctionnel dans votre nouveau mécanisme de construction. Si votre application de console appelle les fonctions de l'API win32, vous avez le choix entre modifier toutes les sources où elles sont utilisées ou écrire un module qui implémente ces fonctions. Dans les efforts de portage précédents de ce type, j'ai essayé dans les deux sens et le dernier était plus facile. J'ai fini par écrire seulement environ 18 à 20 fonctions de shim.J'ai eu assez de succès pour écrire une couche d'abstraction OS qui a été utilisée sur de nombreux projets et qui m'a permis de compiler sur Windows natif, cygwin, Linux, VxWorks, etc. avec des changements mineurs à un ou deux fichiers.

(ps N'importe quel intérêt dans une version open source d'une couche d'abstraction d'OS basée sur C++ Je pensais en libérer une version non encombrée au monde si l'intérêt est suffisant, surtout quand BOOST est trop lourd - ie projets intégrés.)

2

Vous pouvez exporter un fichier make à partir de Visual Studio.

Mise à jour: En fait, vous ne pouvez pas plus, sauf si vous avez VC6 traîner

+0

merci. un tutoriel, un lien, un mot clé? – MBZ

+0

Mis à jour comme j'avais tort. –

+2

Je ne donne pas de dang sur VS ou C++, mais +1 pour l'avatar accrocheur;) –

3

Très probablement, vous n'avez pas besoin autoconf (et je vous suggère de ne pas y toucher, unless you love pain), parce que vous êtes ne pas essayer d'être portable à une douzaine de saveurs Unix.

  1. Faites rouler vos Makefiles manuellement. Cela ne devrait pas être trop difficile si vous avez un ensemble de règles partagées et avez un minimum de Makefiles qui spécifient juste les fichiers sources et les options de compilation.
  2. Utilisez GCC 4.5 comme it supports more C++0x features.
1

RESTEZ À L'AUTO * et configurez. Ce sont horribles à mon humble avis.

Si vous pouvez obtenir une VS 8 ou 9 vcproj/sln, vous pouvez utiliser this. Je ne l'ai pas utilisé, donc je ne peux donner aucun conseil.

Si vous êtes en mode de conversion manuelle, je vous suggère quelque chose comme CMake, car il est assez facile de se préparer assez rapidement, même pour les grands projets.

Si le projet a une mise en page simple, vous pouvez avoir du succès à l'aide de qmake de Qt 4 comme ceci:

qmake -project 

Il affichera le fichier d'un qmake, qui peut être transformé en un Makefile sur de nombreuses plateformes (en utilisant qmake). Cela devrait fonctionner, mais pas parfaitement. Alternativement, vous pouvez installer le plugin Qt pour VS, et le laisser générer le fichier pro à partir d'un projet VS existant. Cela rendra votre système de construction dépendant de qmake de Qt4, ce qui n'est probablement pas ce que vous voulez.

Il y a bien sûr d'autres choses comme cmake, mais elles nécessiteront toutes une intervention manuelle.

1

Le moyen le plus rapide de le faire? Sérieusement, en fonction de vos besoins, même générer un makefile peut être exagéré. Si vous êtes simplement intéressé par un rapide et sale "voyons si nous pouvons obtenir un programme de travail sur Linux", lancez simplement vos fichiers de code sur g ++ et voyez ce qui se passe.

Questions connexes