J'ai appris C ++ à l'école pour créer de petits programmes de ligne de commande. P>
Cependant, je n'ai construit que mes projets avec des IDes, y compris VS08 et QTCreator. P>
Je comprends le processus derrière la construction d'un projet: Compiler la source de code d'objet, puis les relier à un exécutable spécifique à la plate-forme ( La chose est, bien que les IDes font tout cela sous le capot, ce qui rend la vie très facile, je ne suis pas vraiment savoir em> Qu'est-ce qui se passe vraiment et sentez que j'ai besoin de vous habituer à la construction de projets la «vieille façon»: de la ligne de commande, à l'aide de la chaîne d'outils explicitement. P>
Je sais ce que Que recherche, soit une explication, soit un lien vers un didacticiel qui explique, le flux de travail pour un projet C ++, de la première écriture du code jusqu'à exécuter l'exécutable produit. P>
J'aimerais vraiment connaître ce que, comment, et pourquoi de construire C ++. P>
(Si cela fait de la différence, je passe à Mac OS X, avec GCC 4.0.1 et make 3.81) P>
Merci! P> .exe code>,
.App code>, etc. ). Je sais aussi que la plupart des projets utilisent également
faire code> pour rationaliser le processus de compilation et de liaison de plusieurs fichiers source et d'en-tête. P>
Makefile code> S est, mais pas comment les écrire.
Je sais ce que gcc code> fait, mais pas comment l'utiliser.
Je sais ce que fait la liaison, mais pas comment l'utiliser. P>
8 Réponses :
compilateur prend un CPP et tourne en un fichier d'objet contenant du code natif et des informations sur ce code natif P>
Un linker prend les fichiers d'objet et établit une excusable à l'aide des informations supplémentaires dans le fichier d'objet .... Il trouve toutes les références aux mêmes choses et les relie et les relie et les rend utiles pour le système d'exploitation. Savoir comment charger tout le code en mémoire. p>
Consultez les formats de fichier d'objet pour obtenir une meilleure compréhension de ce que le compilateur produit p>
http://fr.wikipedia.org/wiki/Object_file (utilisation des compilateurs différents différents formats) p>
Vérifiez également (pour GCC) p>
http://pages.cs.wisc.edu/ ~ beechung / ref / gcc-intro.html sur ce que vous tapez à la ligne de commande p>
Je ne suis pas la descente, mais je suppose que cela pourrait être parce que l'astucieux a dit qu'il savait ce qui était fait, mais pas comment écrire le makefile ou faire les opérations sur la ligne de commande, de sorte que vous répondiez à la mauvaise question.
Le bowvote d'origine était parce que vous avez simplement répété ce que j'ai dit que je savais déjà (ce que le compilateur et le compilateur font). Le lien de fichier d'objet n'était pas utile et n'a pas aidé à répondre à ma question. J'ai annulé le bowvote parce que le lien de GCC est une très bonne ressource, mais tout ce que je cherchais.
Ne soyez pas découragé @keith, ce sont juste des points de Airmiles. C'est le karma qui est réel. ;)
Un exemple simple est souvent utile pour montrer la procédure de base, donc:
échantillon d'utilisation GCC pour compiler c ++ fichiers: p> à utiliser faire
. / Code> Pour effectuer cette version, le filefile suivant pourrait être utilisé: p>
$ make # build it
[...]
$ ./program # run it
Note très importante pour le makefile: les onglets sont explicitement notés et font partie de la syntaxe et ne sont pas traités de la même manière que les espaces. Cela conduit à toutes sortes de maux de tête - les maquillages sont mieux édités dans un éditeur de texte qui peut montrer la différence entre un onglet et un espace explicitement.
Lorsque vous construisez explicitement avec G ++ dans tous les cas les plus triviaux, vous devez également créer un lien avec G ++. Ceci par opposition à la liaison avec LD, comme vous pouvez le code C. La raison en est que, dans C ++, la liaison doit savoir que seul le compilateur sait, des trucs qui ne sont normalement pas trouvés dans le code d'objet. Et pour cela, le compilateur C ++ doit parler à la liaison. Donc, la liaison avec g ++ et g ++ appellera sous la HOOD LD de la manière appropriée.
Je sais ce que sont les fabricants, mais pas comment les écrire. P>
La syntaxe de marque est horrible, mais le GNU fait des docs ne sont pas mauvais. La syntaxe principale est la suivante: p>
xxx pré> qui définit les commandes de la cible à partir des dépendances données. P>
lecture docs et exemples est probablement comment la plupart des gens apprennent des fabricants , comme il y a beaucoup de saveurs de faire avec leurs propres légères différences. Téléchargez des projets (choisissez quelque chose de connu pour travailler sur votre système, vous pouvez donc l'essayer), regarder le système de construction et voir comment ils fonctionnent. P>
Vous devez également essayer de créer une simple marque ( Dessez un tas de fonctionnalités plus difficiles pour votre première version); Je pense que c'est un cas où cela vous donnera une bien meilleure compréhension de la situation. P>
Je sais ce que GCC fait, mais pas comment l'utiliser. P> blockQuote>
à nouveau,
man g ++ code>, pages d'information et autre documentation est utile, mais l'utilisation principale lorsque vous l'appelez directement (au lieu de via un système de construction) sera: P>
#!/bin/sh g++ $CXXFLAGS "$@"
Juste pour lancer ceci là-bas, la documentation complète du GCC peut être trouvée ici: http://www.delorie.com/gnu/docs/gcc/gcc_toc.html p>
Et un très bon tutoriel de makefile peut être trouvé ici: MrBook.org/Tutorials/Make
Disons que vous voulez écrire une application simple 'Hello World'. Vous avez 3 fichiers, hello.cpp code>
hello-écrivain.cpp code> et
hello-écrivain.h code>, le contenu étant p>
// Makefile
CC=gcc
CXX=g++
CXXFLAGS+=-Wall -Wextra -Werror
CXXFLAGS+=-Ipath/to/headers
LDLIBS+=-lstdc++ # You could instead use CC = $(CXX) for the same effect
# (watch out for c code though!)
all:hello # default target
hello:hello.o hello-world.o # linker
hello.o:hello.cpp hello-world.h # compile a module
hello-world.o:hello-world.cpp hello-world.h # compile another module
$(CXX) $(CXXFLAGS) -c $< -o $@ # command to run (same as the default rule)
# expands to g++ -Wall ... -c hello-world.cpp -o hello-world.o
Pourriez-vous mettre à jour votre réponse avec ce que le maquillage final ressemble à la mise en œuvre des règles et des variables que vous mentionnez?
@Austine Ce fabricant utilise les règles et les liens implicites en utilisant gcc code>. Vous pouvez également définir vos propres règles si vous devez, vérifier le manuel de GNU.
Votre poste a ramené la mémoire de la vieille jours.
Vous pouvez également consulter Autoproject, qui configure des fichiers automake et AutoConf, ce qui facilite la compilation de vos packages sur différentes plateformes: http://packages.debian.org/unstable/devel/autoproject p>
J'aime Ceci intro issu de la construction d'un programme World Hello avec GCC, basé sur Linux Mais les trucs de ligne de commande doivent fonctionner correctement sur OS / X. En particulier, il vous traverse des erreurs courantes et de voir les messages d'erreur. P>
Saints compilateurs, Robin, la chene de Darn a fonctionné! em> p>
C'est ce qui m'a aidé à apprendre l'autoconf, la voiture, ...: p>
http: //www.bioinf.uni-freiburg. DE / ~ MMANN / HOWTO / Automake.html P>
C'est un bon tutoriel progresse d'un simple helloworld à des structures plus avancées avec des bibliothèques, etc. P>