Développement C ++ sous Linux – Où commencer?

J’ai décidé de laisser mes fenêtres installées derrière et j’exécute maintenant Debian comme système d’exploitation par défaut. J’ai toujours codé sous Windows et plus particulièrement avec Visual Studio. Je suis actuellement en train d’essayer de me familiariser avec la compilation de mon code sous Linux.

Bien que j’aie encore beaucoup de documentation à lire, et que vous ne vous attendiez pas à ce que ce soit trop facile pour moi, il serait toujours intéressant de vous donner quelques conseils sur la manière de commencer. J’ai des questions spécifiques, mais n’hésitez pas à suggérer / recommander autre chose concernant le sujet.

  • Quels sont les guides recommandés pour créer un fichier make, comment puis-je comstackr à partir de ce makefile (est-ce que j’appelle moi-même g ++, est-ce que j’utilise «make»?)
  • En regardant d’autres logiciels Linux, ils semblent presque toujours avoir un fichier ‘configure’. Qu’est-ce que cela fait exactement? Vérifie-t-il uniquement si les bibliothèques requirejses sont installées ou fait-il plus que simplement vérifier les exigences?
  • Comment est-ce que je lie des bibliothèques, et comment cela se rapporte-t-il à mes parameters de makefile ou de g ++? Dans Windows, je comstackrais la bibliothèque, inclurais des fichiers d’en-tête, dirais à mon éditeur de liens quel fichier lib supplémentaire il fallait lier, et copiais un fichier dll. Comment fonctionne exactement ce processus sous Linux?
  • Recommandations pour les éditeurs de code? J’utilise actuellement nano et j’ai entendu parler de vim et emacs, mais je ne sais pas quels en sont les avantages. Y en a-t-il d’autres, et pourquoi les considérerais-je parmi les trois précédentes? Note: Je ne cherche pas un IDE.

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

Quels sont les guides recommandés pour créer un fichier make, comment puis-je comstackr à partir de ce makefile (est-ce que j’appelle moi-même g ++, est-ce que j’utilise «make»?)

Vous construisez à partir du fichier Make en appelant “make”. Et dans votre fichier makefile, vous comstackz 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? Vérifie-t-il uniquement si les bibliothèques requirejses sont installées ou fait-il plus que simplement vérifier les exigences?

C’est un script généralement utilisé pour configurer différentes choses en fonction de l’environnement utilisé pour la construction. Parfois, ce n’est qu’un script shell de base, d’autres fois, il invoque des outils comme Autoconf pour découvrir ce qui est disponible lors de la construction. Le script “configure” est également un endroit où l’utilisateur peut spécifier diverses choses facultatives à construire ou à exclure, comme le support des fonctionnalités expérimentales.

Comment est-ce que je lie des bibliothèques, et comment cela se rapporte-t-il à mes parameters de makefile ou de g ++? Dans Windows, je comstackrais la bibliothèque, inclurais des fichiers d’en-tête, dirais à mon éditeur de liens quel fichier lib supplémentaire il fallait lier, et copiais un fichier dll. Comment fonctionne exactement ce processus sous Linux?

ld est l’éditeur de liens GNU. Vous pouvez l’invoquer séparément (ce que la plupart des makefiles vont faire) ou vous pouvez lui déléguer g ++. Les options que vous transmettez à g ++ et ld déterminent où rechercher les en-têtes, les bibliothèques à lier et comment générer le résultat.

Recommandations pour les éditeurs de code? J’utilise actuellement nano et j’ai entendu parler de vim et emacs, mais je ne sais pas quels en sont les avantages. Y en a-t-il d’autres, et pourquoi les considérerais-je parmi les trois précédentes? Note: Je ne cherche pas un IDE.

Vim et Emacs sont des éditeurs très flexibles qui supportent un grand nombre d’utilisations différentes. Utilisez ce qui vous convient le mieux, bien que je suggère que vous souhaitiez quelques petites choses, comme la coloration syntaxique.

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

Créer des fichiers de fabrication à la main est généralement une manière très peu pratique de créer des variantes Linux / distix. Il existe de nombreux systèmes de génération pour la génération automatique de fichiers make, sans fichiers make. Autotools GNU , Cmake , Scons , jam , etc.

Aussi pour approfondir la configuration.

  • Vérifie les compilateurs, bibliothèques et architectures disponibles.
  • S’assure que votre système correspond à la liste de paquetages compatible appropriée.
  • Vous permet de spécifier des arguments de ligne de commande pour spécialiser votre build, votre chemin d’installation, les packages d’options, etc.
  • Configure génère ensuite un Makefile approprié à votre système.

Quels sont les guides recommandés pour créer un fichier make, comment puis-je comstackr à partir de ce makefile (est-ce que j’appelle moi-même g ++, est-ce que j’utilise «make»?)

J’ai appris à écrire des fichiers Makefiles en lisant le manuel GNU Make .

En regardant d’autres logiciels Linux, ils semblent presque toujours avoir un fichier ‘configure’. Qu’est-ce que cela fait exactement? Vérifie-t-il uniquement si les bibliothèques requirejses sont installées ou fait-il plus que simplement vérifier les exigences?

Le fichier de configuration est généralement associé à des autotools . Comme son nom l’indique, il vous permet de configurer le logiciel. Du sharepoint vue du développeur, cela signifie principalement la définition de macros, qui déterminent les variables, les bibliothèques disponibles et autres. Il teste également la disponibilité des bibliothèques. À la fin, 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 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 laid. Certains des plus populaires sont CMake , Jam ( Boost Jam pourrait être intéressant pour C ++) et Waf . Certains systèmes de génération 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 des dépendances” (pour les bibliothèques, etc.) devrait également être faite manuellement.

Edit: Brian Gianforcaro l’a également souligné.

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

  • Editeur: vim et emacs sont populaires. Ce qui compte le plus, comme pour la plupart des outils, est d’en maîsortingser un. J’aime utiliser vim car vi (son descendant) est disponible partout, mais cela peut ne pas être très pertinent, surtout si vous restz sur Linux. Tout éditeur de programmation est bien.

  • configurer: sauf si vous faites de gros projets, ne vous en préoccupez pas. C’est un cauchemar à utiliser et à déboguer. Cela n’a de sens que si vous avez l’intention de dissortingbuer 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 les scons et les autotools, mais j’utilise toujours make pour les petits projets (quelques fichiers).

Concernant la bibliothèque partagée: c’est presque comme Windows, sauf que vous vous connectez directement à la bibliothèque partagée – il n’y a pas de distinction entre .lib et .dll sous Linux. Par exemple. pour une bibliothèque foo avec une fonction foo:

int foo(void) { return 1; } 

Vous le construiriez comme suit:

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

Une main (bien sûr dans la vraie vie, vous mettez l’API dans un fichier d’en-tête):

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

Et puis, vous liez comme:

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

Le -L. est là pour dire que vous voulez que l’éditeur de liens regarde dans le répertoire courant (contrairement à Windows, cela n’est jamais fait par défaut sous Linux), le -lfoo dit de créer un lien avec la bibliothèque foo.

Donc, pour vous aider à démarrer, je vous dirigerai tout d’abord vers ce guide pour makefiles, qui couvre également certains éléments de liaison.
C’est juste un petit quelque chose que notre professeur d’informatique de l’université nous a donné. Je l’ai trouvé très clair et concis, très utile.

Et en ce qui concerne un IDE, j’utilise généralement eclipse car il gère également le makefile. Sans parler de la compilation et de la sortie standard sont à scope de main dans le programme.
Il était principalement destiné au développement Java, mais il existe également un plug-in C / C ++!

Je recommande le livre The Art of Unix Programming par ESR. Il couvre le choix de l’éditeur, le langage de programmation, etc. Il donne également une bonne idée de l’état d’esprit derrière la programmation sous Unix ou Linux.

Pour les éditeurs, vous voulez probablement Vim ou Emacs. Ils sont tous deux différents et il vaut mieux parler de goût personnel qu’autre chose. J’utilise Vim. Il est idéal pour se déplacer rapidement dans le code et apporter des modifications. Je n’aimais pas autant Emacs mais beaucoup de gens le font. Emacs est extrêmement extensible et peut être utilisé pour tout, d’un lecteur de nouvelles à un lecteur. Essayez les deux et voyez ce que vous aimez.

  • Recommandations pour les éditeurs de code? J’utilise actuellement nano et j’ai entendu parler de vim et emacs, mais je ne sais pas quels en sont les avantages. Y en a-t-il d’autres, et pourquoi les considérerais-je parmi les trois précédentes? Note: Je ne cherche pas un IDE.

Si vous utilisez Linux avec un gestionnaire de fenêtres (KDE, Gnome, etc.), vous pouvez également utiliser l’éditeur de texte standard pour votre gestionnaire de fenêtres. L’avantage principal qu’il aurait sur vim / emacs / nano est qu’il semblerait plus familier à celui provenant d’un environnement Windows – un éditeur écrit pour s’exécuter sur le gestionnaire de fenêtres a une barre de menus, des dialogs d’ouverture / de sauvegarde de fichiers, annuler / rétablir , et de nombreuses autres fonctionnalités intéressantes que les éditeurs de console ne peuvent probablement pas égaler. (Bien que emacs et vim soient assez sophistiqués ces jours-ci, alors qui sait ;-P)

Sur KDE (qui est ce que j’utilise), je peux recommander KWrite, qui est un éditeur de texte bien présenté mais assez basique avec une coloration syntaxique; ou Kate, qui est un éditeur de texte plus sophistiqué avec quelques fonctionnalités supplémentaires: la gestion de session, un terminal intégré, l’appel automatique de make et plusieurs plugins incluant un visualiseur de symboles C / C ++. J’utilise habituellement Kate pour mon travail en C ++ lorsque je ne veux pas m’embêter à configurer un projet IDE complet. (FYI l’IDE pour KDE est KDevelop)

Recommandations pour les éditeurs de code? J’utilise actuellement nano et j’ai entendu parler de vim et emacs, mais je ne sais pas quels en sont les avantages. Y en a-t-il d’autres, et pourquoi les considérerais-je parmi les trois précédentes? 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’eux ou ses dérivés (vim, xemacs, etc.) sont la solution. Les deux prennent en charge la mise en évidence de la syntaxe 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.

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

EDIT [Dec 2014]: Il semble y avoir une tendance en ce qui concerne les éditeurs multi-plateformes et hautement extensibles récemment. Cela pourrait être un bon choix si vous souhaitez 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 ; Les deux fonctionnent sur Windows / Linux / Mac et ont d’excellentes communautés de plugins et de thèmes.

l’espace entre l’invocation directe de g ++ et l’utilisation d’une chaîne de génération d’autotools est assez étroite. Atteindre les autotools, ce qui est vraiment le plus proche d’un «projet» disponible dans le monde Linux / Open Source.

Pour quelqu’un venant de Visual Studio, tous ces éléments en ligne de commande peuvent sembler obscurs et compliqués. Avant de vous lancer dans un junkie bash shell / vim / emacs, essayez d’abord quelques outils basés sur l’interface graphique pour avoir un temps de transition …

  • QT 4.5 avec son mini-IDE QT Creator. C’est le meilleur cadre, lightyears devant la concurrence.
  • Eclipse (C ++) – D’après mon expérience avec Windows, je trouve ça 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 longs-cheveux vont se moquer et prétendre que vim ou emacs leur donne l’environnement de développement le meilleur et le plus rapide, mais des coups différents pour des gens différents. Une personne habituée à un IDE mettra du temps à basculer ou ne voudra peut-être pas changer du tout. Pour toutes leurs prouesses d’édition, la création d’applications d’interface graphique n’est certainement pas un travail pour les outils 80×25. Il faut des années pour devenir un expert du côté de la ligne de commande, c’est plus une transformation de la vision du monde qu’autre chose.

En guise de remarque parmi les bonnes réponses ici .. Au cas où vous voulez lancer en tant que gars de Windows, je vous suggère le nouveau SDK de Qt . On se sent comme à la maison 🙂

Je conseille d’utiliser SCons à la place de Make, il fait le même travail mais il est plus facile à utiliser et à manipuler pour créer des bibliothèques dynamics, des dépendances, etc. Voici un exemple réel 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 content de JEdit pour le codage, mais c’est une question de goût.