web-dev-qa-db-fra.com

Développement C++ sur Linux - par où commencer?

J'ai décidé de laisser mon installation Windows derrière moi et je lance maintenant Debian comme système d'exploitation par défaut. J'ai toujours codé sous Windows et plus particulièrement avec Visual Studio. J'essaie actuellement de m'habituer à compiler mon code sous Linux.

Bien que j'ai encore beaucoup de documentation à lire, et que vous ne vous attendiez pas à ce que ce soit trop facile pour moi, il serait toujours agréable de trouver des indications sur les points de départ. J'ai quelques questions spécifiques, mais n'hésitez pas à suggérer/recommander autre chose à propos du sujet.

  • Quels sont les guides recommandés sur la création d'un fichier make, comment compiler à partir de ce fichier make (dois-je appeler moi-même g ++, dois-je utiliser «make»?)
  • En regardant d'autres logiciels Linux, ils semblent presque toujours avoir un fichier 'configure'. Qu'est-ce que cela fait exactement? Est-ce seulement vérifier si les bibliothèques requises sont installées ou est-ce plus que vérifier les exigences?
  • Comment lier des bibliothèques et comment est-ce lié à mes paramètres makefile ou g ++? Dans Windows, je compilerais la bibliothèque, inclurais des fichiers d'en-tête, indiquerais à l'éditeur de liens quel fichier lib supplémentaire lier, et copierais un fichier dll. Comment fonctionne exactement ce processus sous Linux?
  • Des recommandations pour les éditeurs de code? J'utilise actuellement nano et j'ai entendu parler de vim et d'emacs, mais je ne sais pas quels sont leurs avantages mutuels. Y at-il d'autres, et pourquoi devrais-je les considérer sur l'un des trois précédents? Note: Je ne cherche pas un IDE.

Toute aide, des liens vers des guides et de la documentation (de préférence ceux destinés aux débutants) sont très appréciés!

30
Daniel Sloof

Quels sont les guides recommandés sur la création d'un fichier make, comment compiler à partir de ce fichier make (dois-je appeler moi-même g ++, dois-je utiliser «make»?)

Vous construisez à partir du makefile en appelant "make". Et dans votre makefile, vous compilez et liez en utilisant g ++ et ld.

En regardant d'autres logiciels Linux, ils semblent presque toujours avoir un fichier 'configure'. Qu'est-ce que cela fait exactement? Est-ce seulement vérifier si les bibliothèques requises sont installées ou est-ce plus que vérifier les exigences?

C'est un script habituellement utilisé pour configurer diverses choses en fonction de l'environnement utilisé pour la construction. Parfois, il ne s'agit que d'un script Shell de base, parfois, il fait appel à des outils tels que Autoconf pour découvrir ce qui est disponible lors de la construction. Le script "configure" est généralement également un emplacement permettant à l'utilisateur de spécifier diverses choses à construire ou à exclure, telles que la prise en charge de fonctionnalités expérimentales.

Comment lier des bibliothèques et comment est-ce lié à mes paramètres makefile ou g ++? Dans Windows, je compilerais la bibliothèque, inclurais des fichiers d'en-tête, indiquerais à l'éditeur de liens quel fichier lib supplémentaire lier, et copierais un fichier dll. Comment fonctionne exactement ce processus sous Linux?

ld est le lieur GNU. Vous pouvez l'invoquer séparément (ce que la plupart des makefiles finiront par faire), ou vous pouvez y déléguer g ++. Les options que vous transmettez à g ++ et à ld déterminent où rechercher les en-têtes inclus, les bibliothèques à lier et comment afficher le résultat.

Des recommandations pour les éditeurs de code? J'utilise actuellement nano et j'ai entendu parler de vim et d'emacs, mais je ne sais pas quels sont leurs avantages mutuels. Y at-il d'autres, et pourquoi devrais-je les considérer sur l'un des trois précédents? Note: Je ne cherche pas un IDE.

Vim et Emacs sont des éditeurs très flexibles qui supportent un grand nombre d'usages différents. Utilisez ce qui vous convient le mieux, mais je suggérerais que vous souhaitiez peut-être quelques tâches minimales, telles que la coloration syntaxique.

22
MandyK

Juste une note pour accompagner les réponses de MandyK.

La création manuelle de fichiers make est généralement un moyen très inusable de construire entre les variantes/unix de la distribution linux. Il existe de nombreux systèmes de génération permettant de générer automatiquement des fichiers de marque, construisant sans fichiers de marque. GNU Outils automatiques , Cmake , Scons , jam , etc.

Aussi pour aller plus en profondeur sur configurer.

  • Vérifie les compilateurs disponibles, les bibliothèques, l'architecture du système.
  • Assurez-vous que votre système correspond à la liste de packages compatibles appropriée.
  • Vous permet de spécifier des arguments de ligne de commande pour spécialiser votre construction, votre chemin d'installation, vos packages d'options, etc.
  • Configure génère ensuite un Makefile approprié spécifique à votre système.
13

Quels sont les guides recommandés sur la création d'un fichier make, comment compiler à partir de ce fichier make (dois-je appeler moi-même g ++, dois-je utiliser «make»?)

J'ai appris à écrire des makefiles en lisant le GNU Make manual .

En regardant d'autres logiciels Linux, ils semblent presque toujours avoir un fichier 'configure'. Qu'est-ce que cela fait exactement? Est-ce seulement vérifier si les bibliothèques requises sont installées ou est-ce plus que vérifier les exigences?

Le fichier de configuration est généralement associé à autotools . Comme le nom du script l'indique, il vous permet de configurer le logiciel. Du point de vue du développeur, cela signifie principalement la définition de macros, qui déterminent les variables, les bibliothèques disponibles, etc. Il teste également la disponibilité des bibliothèques. Finalement, le script génère un Makefile GNU, que vous pouvez ensuite utiliser pour créer et installer le logiciel.

Le système de construction GNU n'est qu'un exemple parmi d'autres. Je n'aime pas particulièrement le système de compilation GNU, car il a tendance à être plus lent que les autres et génère un Makefile déplaisant. Certains des plus populaires sont CMake , Jam ( Boost Jam pourrait intéresser C++) et waf . Certains systèmes de compilation génèrent simplement des fichiers Makefiles, tandis que d'autres fournissent un système de génération complètement nouveau. Pour les projets simples, écrire un Makefile à la main serait facile, mais la "vérification de dépendance" (pour les bibliothèques, etc.) devrait également être effectuée manuellement.

Edit: Brian Gianforcaro a également souligné ce point.

7
sebnow

Donc pour vous aider à commencer, je vais tout d’abord vous indiquer ce guide pour les makefiles, il contient également des liens.
C'est juste un petit quelque chose que mon prof d'informatique de l'université nous a confié. Je l'ai trouvé très clair et concis, très utile.

Et comme pour un IDE, j'utilise Eclipse généralement parce qu’il gère aussi le makefile. Sans parler de la compilation et de la sortie standard sont à portée de main dans le programme.
Il était principalement destiné au développement Java, mais il existe aussi un plugin C/C++!

4
gnomed

Votre question est un peu trop générale, mais voici ce que je recommanderais:

  • Éditeur: vim et emacs sont populaires. Comme pour la plupart des outils, ce qui compte le plus, c'est d'en maîtriser un. J'aime utiliser vim car vi (son descendant) est disponible partout, mais cela peut ne pas être très pertinent, surtout si vous restez sous Linux. Tout éditeur de programmation est bon.

  • configurez: à moins de faire de gros projets, ne vous embêtez pas avec cela. C'est un cauchemar à utiliser et à déboguer. Cela n’a de sens que si vous avez l’intention de distribuer votre projet - dans ce cas, lisez le livre automatique: http://sources.redhat.com/autobook/ . Comme d'autres l'ont dit, il existe des alternatives (cmake, scons, etc ...). Je connais assez bien scons et autotools, mais j'utilise toujours make pour les petits projets (quelques fichiers).

Concernant la bibliothèque partagée: il s’agit presque de Windows, sauf que vous vous connectez directement à la bibliothèque partagée - il n’ya pas de distinction .lib vs .dll sous Linux. Par exemple. pour une bibliothèque foo avec une fonction foo:

int foo(void)
{
     return 1;
}

Vous voudriez le construire comme suit:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

Un principal (bien sûr, dans la vie réelle, vous mettez l'API dans un fichier d'en-tête):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

Et puis, vous le liez en tant que:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

Le -L. est ici pour dire que vous voulez que l'éditeur de liens regarde dans le répertoire courant (contrairement à windows, cela ne se fait jamais par défaut sous Linux), le -lfoo dit de faire un lien avec la bibliothèque foo.

4
David Cournapeau
  • Des recommandations pour les éditeurs de code? J'utilise actuellement nano et j'ai entendu parler de vim et d'emacs, mais je ne sais pas quels sont leurs avantages mutuels. Y at-il d'autres, et pourquoi devrais-je les considérer sur l'un des trois précédents? Note: Je ne cherche pas un IDE.

Si vous utilisez Linux avec un gestionnaire de fenêtres (KDE, Gnome, etc.), vous pouvez également envisager d'utiliser l'éditeur de texte standard pour votre gestionnaire de fenêtres. Le principal avantage qu'il aurait sur vim/emacs/nano est qu’il semblerait plus familier à ceux provenant d’un environnement Windows: un éditeur écrit pour être exécuté sur le gestionnaire de fenêtres comporte une barre de menus, des boîtes de dialogue d’ouverture et de sauvegarde des fichiers, des fonctions annuler/rétablir. et de nombreuses autres fonctionnalités intéressantes que les éditeurs de console ne peuvent probablement pas égaler. (Bien qu'Emacs et Vim soient assez sophistiqués de nos jours, alors qui sait ;-P)

Sur KDE (ce que j’utilise), je peux recommander KWrite, un éditeur de texte bien conçu mais assez basique avec une coloration syntaxique en surbrillance; ou Kate, qui est un éditeur de texte plus sophistiqué doté de fonctionnalités supplémentaires: gestion de session, panneau de terminal intégré, invocation automatique de make et plusieurs plugins, notamment une visionneuse de symboles C/C++. J'utilise habituellement Kate pour mon travail en C++ lorsque je ne veux pas me préoccuper de la configuration d'un projet complet IDE. (Pour info, le IDE de KDE est KDevelop)

3
David Z

Des recommandations pour les éditeurs de code? J'utilise actuellement nano et j'ai entendu parler de vim et d'emacs, mais je ne sais pas quels sont leurs avantages mutuels. Y at-il d'autres, et pourquoi devrais-je les considérer sur l'un des trois précédents? Note: Je ne cherche pas un IDE.

Vi et Emacs sont les deux éditeurs Unix par excellence; Si vous souhaitez utiliser un éditeur de texte plutôt qu'un IDE, l'un d'entre eux ou ses dérivés (vim, xemacs, etc.) est la solution. Les deux prennent en charge la coloration syntaxique et toutes sortes de fonctionnalités, par défaut ou via des extensions. La meilleure partie de ces éditeurs est l’extensibilité qu’ils offrent; emacs via une variété de LISP et vim via son propre langage de script.

Personnellement, j'utilise Emacs, je ne peux donc pas en dire beaucoup sur Vim, mais vous devriez pouvoir trouver de nombreuses informations sur les deux en ligne. Emacs a plusieurs bons tutoriels et références, y compris celui-ci .

EDIT [décembre 2014]: Il semble y avoir eu récemment une tendance des éditeurs multi-plateformes et très extensibles. Cela pourrait être un bon choix si vous voulez quelque chose de moins qu'un IDE, mais plus graphique que vi/emacs et une impression native sur plusieurs plates-formes. Je recommande de regarder Sublime ou Atom ; Ces deux systèmes fonctionnent sur Windows/Linux/Mac et ont de grandes communautés de plugins et de thèmes.

3
thekidder

Je recommande le livre The Art of Unix Programming de ESR. Il couvre le choix de l'éditeur, du langage de programmation, etc. Il donne également une bonne idée de l'état d'esprit qui sous-tend la programmation sous Unix ou Linux.

Pour les éditeurs, vous voulez probablement soit Vim ou Emacs. Ils sont tous les deux différents et celui qui est le meilleur est plus un goût personnel qu'autre chose. J'utilise Vim. C'est idéal pour se déplacer rapidement dans le code et apporter des modifications. Je n'ai pas autant aimé Emacs que beaucoup de gens. Emacs est extrêmement extensible et peut être utilisé pour tout, du lecteur de nouvelles aux idées. Essayez les deux et voyez ce que vous aimez.

3
Steve Rowe

Pour quelqu'un venant de Visual Studio, toutes ces choses en ligne de commande peuvent sembler mystérieuses et compliquées. Avant de vous transformer en junkie bash Shell/vim/emacs, essayez d’abord quelques outils basés sur une interface graphique afin que vous disposiez d’un peu de temps de transition ...

  • QT 4.5 avec son mini-IDE QT Creator. C'est le meilleur cadre, quelques années plus tôt que la concurrence.
  • Eclipse (C++) - D'après mon expérience avec Windows, je trouve cela stupéfiant (c'est probablement la meilleure application Java jamais écrite)
  • KDevelop
  • Anjuta
  • Si vous utilisez Delphi, Lazarus/FreePascal est une bonne alternative.

Je suis sûr que les cheveux longs se moqueront et prétendent que vim ou emacs leur fournit l'environnement de développement le meilleur et le plus rapide, mais des traits différents pour des personnes différentes. Une personne habituée à un IDE mettra un certain temps à changer ou ne voudra peut-être pas changer du tout. Malgré toutes leurs prouesses en matière d'édition, la création d'applications à interface graphique n'est certainement pas un travail pour les outils 80x25. Il faut des années pour devenir un expert du côté de la ligne de commande, sa transformation de la vision du monde plus qu’autre chose.

2
rep_movsd

l'espace entre l'appel direct de g ++ et l'utilisation d'une chaîne de construction autotools est plutôt étroit. Devenez bon avec autotools, ce qui est vraiment ce qui se rapproche le plus d'un "projet" disponible dans le monde Linux/Open Source.

En guise de remarque parmi les réponses appropriées ici. Si vous voulez vous lancer en tant que responsable Windows, je vous suggérerais le tout nouveau Qt SDK . On se sent comme chez soi :-)

1
utku_karatas

Je conseille d'utiliser SCons à la place de Make, il fait le même travail mais il est plus facile à utiliser et à gérer directement comment créer des bibliothèques dynamiques, des dépendances, etc. Voici un exemple concret pour un prog simple

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

En tant qu'éditeur de texte, je suis satisfait de JEdit pour le codage, mais c'est une question de goût.

0
Monkey