Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Makefile: arborescence parallèle pour les .c et les .o

21 réponses
Avatar
Nicolas Hervé
Comment écrire mon makefile si je veux avoir le résultat suivant ?


Arborescence avant 'gmake'

./
makefile
src/
main.c
test/
hello.c
youpi.c


Arborescence après 'gmake'

./
makefile
mon_executable
src/
main.c
test/
hello.c
youpi.c
obj/
test/
test.o
youpi.o
lib/
libtest.so


Autant que possible, j'aimerais utiliser les possibilité qu'offrent les
macros pour éviter d'avoir à modifier le makefile dès que j'ajoute ou
supprime un fichier (voir une arborescence) source.

10 réponses

1 2 3
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Nicolas Hervé wrote:

Comment écrire mon makefile si je veux avoir le résultat suivant ?


Arborescence avant 'gmake'

./
makefile
src/
main.c
test/
hello.c
youpi.c

<...>


Quel rapport avec le langage C. Tu crois que le problème serait différent
avec des fichiers .cpp ou .pas?


--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Nicolas Hervé
Ok, même si le message n'est pas très approprié à un forum spécifique
sur le langage C. Il y en a un de rapport puisque qui n'a jamais touché
à un makefile ici ?

Si un message avec un entête bien spécifié "Makefile" (peut-être
aurait-on préféré "[Makefile]") nuit à la lisibilité de ce forum et que
l'on veuille bien me donner un forum approprié (Il n'y a pas de forum
fr.comp.makefile) alors je veux bien reposer ma question là-bas.

Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', Nicolas Hervé wrote:


Comment écrire mon makefile si je veux avoir le résultat suivant ?



Quel rapport avec le langage C. Tu crois que le problème serait différent
avec des fichiers .cpp ou .pas?





Avatar
Antoine Leca
En c50hrf$86v$, Nicolas Hervé va escriure:
Ok, même si le message n'est pas très approprié à un forum spécifique
sur le langage C. Il y en a un de rapport puisque qui n'a jamais
touché à un makefile ici ?


Je « touche » souvent à des makefile, mais pour autant je ne connais aucune
des particularités du make GNU (bon c'est pas vrai: j'essaye de ne pas les
connaître ;-)).

Et en plus, je ne veux surtout pas les connaître: soit j'écris un projet que
je veux portable, et donc je crée des makefile sans aucune particularité
liée à une certaine implémentation (surtout que dans mon cas je n'arrive pas
à compiler ce programme sur ma plateforme qui n'a pas de mémoire virtuelle:
tros bouffi). Soit je dois gérer un gros projet, et là dès le début make
"pur" est hors jeu ! Déjà donné !


Si un message avec un entête bien spécifié "Makefile" (peut-être
aurait-on préféré "[Makefile]") nuit à la lisibilité de ce forum et
que l'on veuille bien me donner un forum approprié (Il n'y a pas de
forum fr.comp.makefile) alors je veux bien reposer ma question là-bas.


C'est sûr que si tu ne sais pas lire l'anglais mais que tu veux programmer
en make pur, ce n'est pas facile.


Antoine

Avatar
Nicolas Hervé
Antoine Leca wrote:

Si un message avec un entête bien spécifié "Makefile" (peut-être
aurait-on préféré "[Makefile]") nuit à la lisibilité de ce forum et
que l'on veuille bien me donner un forum approprié (Il n'y a pas de
forum fr.comp.makefile) alors je veux bien reposer ma question là-bas.



C'est sûr que si tu ne sais pas lire l'anglais mais que tu veux programmer
en make pur, ce n'est pas facile.


Antoine



Que de sarcasmes ! :-D
Si vous avez un forum ou une URL en anglais (ou même en Allemand, en
Espagnol ou en Italien :-p) sur le sujet je suis preneur.


Avatar
Antoine Leca
En c50upm$d0i$, Nicolas Hervé va escriure:
Que de sarcasmes ! :-D
Si vous avez un forum ou une URL en anglais (ou même en Allemand, en
Espagnol ou en Italien :-p) sur le sujet je suis preneur.


Je ne sais pas pourquoi vous me tirez la langue. Je ne travaille peut-être
pas en allemand en ce moment, mais je pratique en ce moment quatre langues
différentes. Et c'est pas du gâteau. Mais vous avouerez que ce n'est pas une
situation commune. Donc quand quelqu'un annonce sur fr.comp.lang.c, dans un
thème passablement hors sujet, qu'il n'a trouvé aucune ressource, je
comprend qu'il est limité au français, seule explication raisonnable à mon
sens.

Bon, c'est pas tout cela. Je ne sais pas combien de temps vous avez cherché.
J'ai demandé la liste des forums sur mon serveur, et j'ai trouvé, au hasard:

de.comp.gnu
alt.make.money.fast
comp.os.linux.developement.{apps,system}
comp.os.linux.portable
gnu.utils.help

Je me suis arrêté là, comme je vous l'écrivis, make ne m'intéresse pas
vraiment, et GNU make encore moins.

En castillan, il ne semble pas y avoir une très bonne pêche.

Sur le web, évidemment, il y a profusion. Le problème, c'est plutôt de
filtrer...
Commençons par le plus simple.
<URL:http://www.gnu.org/software/automake/manual/> ?
<URL:http://www.math.utah.edu/docs/info/configure_toc.html> ?
<URL:http://make.paulandlesley.org/> ?


Antoine

Avatar
DINH Viêt Hoà

Arborescence avant 'gmake'

./
makefile
src/
main.c
test/
hello.c
youpi.c


l'expérience dit qu'il faut avoir les .o dans le même répertoire que
les .c. Pour les bibliothèques, tu peux ruser en créant des .a et en
liant à la fin les .a ensembles.

--
DINH V. Hoa,

"dans la famille, on est tous intelligents" -- sunZ

Avatar
Antoine Leca
En , DINH Viêt Hoà va escriure:

l'expérience dit qu'il faut avoir les .o dans le même répertoire que
les .c.


Comment fais-tu pour gérer deux cibles différentes avec le même arbre source
(en utilisant make, donc sans effacer tout entre chaque compilation) ? Une
fois je m'en suis sorti parce qu'un compilateur génèrait des .o et l'autre
des .OBJ, mais je pense que c'était de la chance...

Comment fais-tu quand l'arbre des sources est (partiellement) sur un
répertoire en lecture seule (partagé, bien sûr), sans utiliser un logiciel
de contrôle de sources ?


Antoine

Avatar
Pierre Maurette
"Antoine Leca" typa:
[...]
Bon, c'est pas tout cela. Je ne sais pas combien de temps vous avez cherché.
J'ai demandé la liste des forums sur mon serveur, et j'ai trouvé, au hasard:

de.comp.gnu
alt.make.money.fast
Manque pas un "rigolard", là ? Ou alors il est implicite ?


Avatar
kilobug

En , DINH Viêt Hoà va escriure:

l'expérience dit qu'il faut avoir les .o dans le même répertoire que
les .c.



Comment fais-tu pour gérer deux cibles différentes avec le même arbre source
(en utilisant make, donc sans effacer tout entre chaque compilation) ? Une
fois je m'en suis sorti parce qu'un compilateur génèrait des .o et l'autre
des .OBJ, mais je pense que c'était de la chance...


De manière générale, je conseille l'utilisation d'autoconf et
d'automake. Il est alors possible, au choix, de compiler "sur place"
ou dans un répertoire différent:

Pour compiler sur place
cd /chemin/vers/monprojet
./configure <...>
make

Compiler à côté:
cd /chemin/vers/buildir/
/chemin/vers/monprojet/configure <...>
make

(typiquement:
cd /usr/src/foo
mkdir build
cd build
../configure <....>
make
)

C'est complètement HS, mais c'est ainsi que je fait.

Attention à ne pas faire "n'importe quoi" dans les Makefile.am, sinon
ça ne marche plus.

Comment fais-tu quand l'arbre des sources est (partiellement) sur
un répertoire en lecture seule (partagé, bien sûr), sans utiliser
un logiciel de contrôle de sources ?


Même pour travailler en solo, je conseille d'utiliser un CVS ou
équivalent, alors à plusieurs ;)

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org


Avatar
DINH Viêt Hoà

(en utilisant make, donc sans effacer tout entre chaque compilation) ? Une
fois je m'en suis sorti parce qu'un compilateur génèrait des .o et l'autre
des .OBJ, mais je pense que c'était de la chance...


libtool génère du .lo et .o à titre d'information.

Comment fais-tu quand l'arbre des sources est (partiellement) sur un
répertoire en lecture seule (partagé, bien sûr), sans utiliser un logiciel
de contrôle de sources ?


utiliser un logiciel de contrôle de source.

ou se le faire à la main :

cp projet ~/mon_repertoire
et make dans ~/mon_repertoire

--
DINH V. Hoa,

"dans la famille, on est tous intelligents" -- sunZ

1 2 3