2010-10-26 4 views
4

Hé, donc je suis un débutant en C mais un programmeur de niveau intermédiaire en général. Je cherche à faire des fichiers et avoir des problèmes pour déterminer exactement ce qu'ils sont, et comment les utiliser. Ainsi, par exemple, je compile actuellement chacun de mes fichiers dans mon projet individuellement en tapant:Simple make file question (C)

gcc -o newoutfilename1.out oldcfilename1.c 
gcc -o newoutfilename2.out oldcfilename2.c 

Maintenant, si je voulais juste exécuter un fichier make pour les compiler à la fois. Je ne veux pas les mettre tous dans un fichier à la fin en voyant comment ils ne sont pas liés. Aussi aller plus d'avance. Est-ce qu'un makefile peut être utilisé pour les tests. Comme après que je COMPILER pour newoutfilename1.out Je veux courir:

./newoutfilename1.out arg1 arg2 arg3 > intothisfile.data 

En général rend ma vie plus facile pendant le codage et le test si le code compile et met les données correctes.

+0

Je pense que vous MENT: * gcc -o newoutfilename1 oldcfilename1.c * et * gcc -o newoutfilename2 oldcfilename2.c * – karlphillip

+0

autant que mon expérience va, je peux nommer le outfile Je satisfais. Ai-je tort? Ou peut-être votre dire puisqu'ils sont indépendants il n'y a pas de fichiers objet alors oui, vous avez raison. Je vais éditer. –

+0

ouais le nom n'importe quoi, n'a pas d'importance pour la plupart des linkers. Cependant, le compilateur peut se fâcher si vous spécifiez un fichier source avec un suffixe inconnu. – Marm0t

Répondre

3

Il existe plusieurs didacticiels GNU Make sur Interwebs. Google a montré un certain nombre de hits. Vous pouvez commencer par this one.

+0

Je suppose que ma question concernait plutôt l'importance de: Ne pouvez-vous pas compiler tous vos fichiers dans un fichier à la fin? et Pouvez-vous exécuter un fichier out dans un fichier make? –

+1

oui vous pouvez lier les objets compilés dans un exécutable (avec ln ou votre compilateur - habituellement votre compilateur utilise ln- l'éditeur de liens) - voir le post d'Angel. Vous ne pouvez pas exécuter un fichier de sortie s'il n'y a pas de 'main' définie dans le fichier. Pour tester vous devez compiler tout en un seul exécutable puis le tester (c'est pourquoi les gens se fâchent contre le vicieux modifier, faire, exécuter, cycle de débogage) – Marm0t

+0

@ Marm0t souhaite que je puisse accepter votre commentaire comme une réponse, mais en acceptant la réponse commentaire était sur devra faire. –

3

Eh bien,

que vous lien donné, Kaelin, avez-vous soin de le lire? Honnêtement, si je n'avais pas écrit quelques centaines de fichiers dans ma vie, je ne comprendrais pas un seul mot dans cet article que vous avez lié.

Un fichier makefile est une sorte de script spécial.

Chaque ligne ressemble à ceci:

target: depends-on.c and.h and-even-another.h 
    command -o target depends-on.c 

première ligne sont tous les fichiers, la deuxième ligne est une commande pour créer le fichier avant le « : »

est un fichier donc. Si la cible est plus ancienne que 'depends-on.c' ou 'and.h' ou 'and-even-another.h' alors la commande de la deuxième ligne est exécutée (en supposant qu'elle va créer/régénérer/sortir la cible du fichier '), généralement ces fichiers sont appelés target.o, s'ils sont compilés à partir d'un fichier source. En d'autres termes: une ligne pour décrire la sortie, après les deux points les fichiers dont dépend la sortie et sur la deuxième ligne la commande pour créer la sortie.

La chose qui reste du ':' s'appelle la 'cible'.

Les cibles peuvent dépendre d'autres cibles.

Vous pouvez utiliser des caractères génériques.

*.o: *.c 
    cc -o "something you have to look up, dont now it from my mind ;D" 

program: *.o 
    ln *.o my.lib another.lib 

ci-dessus ne compile ces fichiers * .c qui sont plus récents que les fichiers * .o correspondants et des liens puis tous les fichiers * .o ainsi que les deux bibliothèques nommées.

Si vous utilisez une machine Linux/Unix, essayez "man make". Sinon google, D

Angelo

+0

Beau tutoriel! Presque tous ceux que j'ai trouvés sont complètement illisibles pour un noob, tout comme le lien. Le vôtre est assez décent. –

+0

Uhm, en fait, oui J'ai * * lu ce tutoriel brièvement avant de le recommander ... Je pense qu'il a fait un très bon travail de résumer les constructions Makefile que j'ai trouvé utile au fil des ans. J'admets que c'est écrit dans un style quelque peu académique, mais je m'attendrais à ce que la plupart des lecteurs de SO soient habitués à cela à partir de textes CS ... :-) –