[HS] Makefile

Le
Gaëtan PERRIER
Bonjour,

Je me pose une question sur les Makefile. J'ai une arbo qui contient des
sources et je lance le make, les .o sont créés dans l'arbo. J'aurai aimé
qu'ils soient tous mis à un endroit bien précis. Est-ce possible?

Merci.

Gaëtan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Franck Joncourt
Le #17349661
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigFECEBC9556FB8633FA049B74
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Gaëtan PERRIER wrote:
Bonjour,



Bonsoir,

Je me pose une question sur les Makefile. J'ai une arbo qui contient de s
sources et je lance le make, les .o sont créés dans l'arbo. J 'aurai aimé
qu'ils soient tous mis à un endroit bien précis. Est-ce possi ble?



CC = gcc
CFLAGS = -g -O0 -Wall
SRCPATH = ./
OBJPATH = ./obj/

%.o: %.c
$(CC) $(CFLAGS) -c $(SRCPATH)$< -o $(OBJPATH)$@

Voila un bout de ce que j'ai sous la main.

Soit les fichiers sources à la racine obtiennent leur fichiers .o da ns
le répertoire obj.

--
Franck Joncourt
http://debian.org - http://smhteam.info/wiki/
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE


--------------enigFECEBC9556FB8633FA049B74
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkjdNqIACgkQxJBTTnXAif4bogCaA7cTX89bGHYKD3XruYB1I4/N
QBwAniA2/nzpo8rcmOdglvwm3p0r+7QB
=MwXj
-----END PGP SIGNATURE-----

--------------enigFECEBC9556FB8633FA049B74--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Gaëtan PERRIER
Le #17349961
Le Fri, 26 Sep 2008 21:22:55 +0200
Franck Joncourt
Gaëtan PERRIER wrote:
> Bonjour,

Bonsoir,

> Je me pose une question sur les Makefile. J'ai une arbo qui contient des
> sources et je lance le make, les .o sont créés dans l'arbo. J'aurai aimé
> qu'ils soient tous mis à un endroit bien précis. Est-ce possible?

CC = gcc
CFLAGS = -g -O0 -Wall
SRCPATH = ./
OBJPATH = ./obj/

%.o: %.c
$(CC) $(CFLAGS) -c $(SRCPATH)$< -o $(OBJPATH)$@

Voila un bout de ce que j'ai sous la main.

Soit les fichiers sources à la racine obtiennent leur fichiers .o dans
le répertoire obj.




Merci pour ta réponse rapide mais ensuite tu fais comment pour le link? De
plus il faut recréer l'arbo source dans ./obj sinon ça ne fonctionne pas, non?

Moi j'ai un truc du genre:

./inc/*.h
./src/*.c
./*.c
./Makefile

Je ne veux pas polluer ./inc et ./src

J'ai donc commencé avec un Makefile du genre:

CC=gcc
CFLAGS=-W -Wall -ggdb3
LDFLAGS EXEC=mon_prog
SRC= $(wildcard *.c)
SRC+=$(wildcard src/*.c)
OBJ= $(SRC:.c=.o)
INC_PATH=./itf/:./inc/

all: $(EXEC)

$(EXEC): $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)

%.o: %.c
@C_INCLUDE_PATH=$(INC_PATH) $(CC) -o $@ -c $< $(CFLAGS)

Ce qui me crée des .o dans ./src/
Si je rajoute ce que tu m'indiques ça me crée bien les .o dans ./obj/
et ./obj/src (à condition que je crée cette arbo avant). Mais ensuite pour le
link ça ne marche pas. J'ai essayé de modifier en
$(EXEC): $(OBJ)
@$(CC) -o $(OBJ_PATH)$@ $^ $(LDFLAGS)

mais sans succès.

Gaëtan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Basile STARYNKEVITCH
Le #17350321
Gaëtan PERRIER wrote:
Bonjour,

Je me pose une question sur les Makefile. J'ai une arbo qui contient des
sources et je lance le make, les .o sont créés dans l'arbo. J'aurai aimé
qu'ils soient tous mis à un endroit bien précis. Est-ce possible?




Outre les solutions déjà mentionnées, pour son propre code, on pourrait
utiliser autre chose que GNU make pour le construire, et notamment omake
(ou scons, jam, ant, ...).




--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Franck Joncourt
Le #17350331
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigAC817E837F4C3F14A23A9BD5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Gaëtan PERRIER wrote:
Le Fri, 26 Sep 2008 21:22:55 +0200
Franck Joncourt

[...]

Merci pour ta réponse rapide mais ensuite tu fais comment pour le link? De
plus il faut recréer l'arbo source dans ./obj sinon ça ne fon ctionne pas, non?

Moi j'ai un truc du genre:

./inc/*.h
./src/*.c
./*.c
./Makefile

Je ne veux pas polluer ./inc et ./src

J'ai donc commencé avec un Makefile du genre:

CC=gcc
CFLAGS=-W -Wall -ggdb3
LDFLAGS=
EXEC=mon_prog
SRC= $(wildcard *.c)
SRC+=$(wildcard src/*.c)
OBJ= $(SRC:.c=.o)
INC_PATH=./itf/:./inc/

all: $(EXEC)

$(EXEC): $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)

%.o: %.c
@C_INCLUDE_PATH=$(INC_PATH) $(CC) -o $@ -c $< $(CFLAGS)



Quelque chose du genre:

SRCPATH = ./
OBJPATH = ./obj/

%.o: %.c
$(CC) $(CFLAGS) -c $(SRCPATH)$< -o $(OBJPATH)$@

mon_prog: ma liste_de _fichier_o
$(CC) $(LDFLAGS) $(OBJPATH)* -o $(HEXPATH)$@

Je n'ai jamais utilisé les wilcards auparavant. Va falloir que je cr euse.

Ce qui me crée des .o dans ./src/
Si je rajoute ce que tu m'indiques ça me crée bien les .o dan s ./obj/
et ./obj/src (à condition que je crée cette arbo avant). Mais ensuite pour le
link ça ne marche pas. J'ai essayé de modifier en
$(EXEC): $(OBJ)
@$(CC) -o $(OBJ_PATH)$@ $^ $(LDFLAGS)

mais sans succès.




--
Franck Joncourt
http://debian.org - http://smhteam.info/wiki/
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE


--------------enigAC817E837F4C3F14A23A9BD5
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkjdRAkACgkQxJBTTnXAif73NACgiPzry+u88+/1tvQWDqKN2Xud
vkwAn11+apsDPD3BsFZpvq5CxpCPNNZ8
=K9pa
-----END PGP SIGNATURE-----

--------------enigAC817E837F4C3F14A23A9BD5--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Gaëtan PERRIER
Le #17351311
Le Fri, 26 Sep 2008 22:20:11 +0200
Franck Joncourt
Gaëtan PERRIER wrote:
> Le Fri, 26 Sep 2008 21:22:55 +0200
> Franck Joncourt [...]
>
> Merci pour ta réponse rapide mais ensuite tu fais comment pour le link? De
> plus il faut recréer l'arbo source dans ./obj sinon ça ne fonctionne pas,
> non?
>
> Moi j'ai un truc du genre:
>
> ./inc/*.h
> ./src/*.c
> ./*.c
> ./Makefile
>
> Je ne veux pas polluer ./inc et ./src
>
> J'ai donc commencé avec un Makefile du genre:
>
> CC=gcc
> CFLAGS=-W -Wall -ggdb3
> LDFLAGS > > EXEC=mon_prog
> SRC= $(wildcard *.c)
> SRC+=$(wildcard src/*.c)
> OBJ= $(SRC:.c=.o)
> INC_PATH=./itf/:./inc/
>
> all: $(EXEC)
>
> $(EXEC): $(OBJ)
> @$(CC) -o $@ $^ $(LDFLAGS)
>
> %.o: %.c
> @C_INCLUDE_PATH=$(INC_PATH) $(CC) -o $@ -c $< $(CFLAGS)

Quelque chose du genre:

SRCPATH = ./
OBJPATH = ./obj/

%.o: %.c
$(CC) $(CFLAGS) -c $(SRCPATH)$< -o $(OBJPATH)$@

mon_prog: ma liste_de _fichier_o
$(CC) $(LDFLAGS) $(OBJPATH)* -o $(HEXPATH)$@



Le problème c'est qu'il ne descend pas dans ./obj/src


Je n'ai jamais utilisé les wilcards auparavant. Va falloir que je creuse.



avec les wildcards je me retrouve par ex. avec OBJ=toto.o src/titi.o
et du coup quand on rajoute $(OBJPATH) ça ne s'applique que à toto.o et donc
il ne trouve pas titi.o


> Ce qui me crée des .o dans ./src/
> Si je rajoute ce que tu m'indiques ça me crée bien les .o dans ./obj/
> et ./obj/src (à condition que je crée cette arbo avant). Mais ensuite pour
> le link ça ne marche pas. J'ai essayé de modifier en
> $(EXEC): $(OBJ)
> @$(CC) -o $(OBJ_PATH)$@ $^ $(LDFLAGS)
>
> mais sans succès.


--
Franck Joncourt
http://debian.org - http://smhteam.info/wiki/
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE





--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Gaëtan PERRIER
Le #17351301
Le Fri, 26 Sep 2008 22:18:14 +0200
Basile STARYNKEVITCH
Gaëtan PERRIER wrote:
> Bonjour,
>
> Je me pose une question sur les Makefile. J'ai une arbo qui contient des
> sources et je lance le make, les .o sont créés dans l'arbo. J'aurai aimé
> qu'ils soient tous mis à un endroit bien précis. Est-ce possible?


Outre les solutions déjà mentionnées, pour son propre code, on pourrait
utiliser autre chose que GNU make pour le construire, et notamment omake
(ou scons, jam, ant, ...).




Pourquoi pas? Un petit exemple avec omake?

Gaëtan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Basile STARYNKEVITCH
Le #17351871
Gaëtan PERRIER wrote:
Le Fri, 26 Sep 2008 22:18:14 +0200
Basile STARYNKEVITCH
utiliser autre chose que GNU make pour le construire, et notamment omake



Pourquoi pas? Un petit exemple avec omake?



Omake est bien documenté:

http://omake.metaprl.org/manual/omake-quickstart.html

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Franck Joncourt
Le #17352141
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig20D90DCB7AF721DFFBCF46B8
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Salut,

[...]
avec les wildcards je me retrouve par ex. avec OBJ=toto.o src/titi.o
et du coup quand on rajoute $(OBJPATH) ça ne s'applique que à toto.o et donc
il ne trouve pas titi.o



Ce qui me crée des .o dans ./src/
Si je rajoute ce que tu m'indiques ça me crée bien les .o d ans ./obj/
et ./obj/src (à condition que je crée cette arbo avant). Ma is ensuite pour
le link ça ne marche pas. J'ai essayé de modifier en
$(EXEC): $(OBJ)
@$(CC) -o $(OBJ_PATH)$@ $^ $(LDFLAGS)

mais sans succès.







Je n'ai pas la solution sous le coude, il faut que je teste.
Je regarde cela un peu plus tard et je te tiens au courant

--
Franck Joncourt
http://debian.org - http://smhteam.info/wiki/
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE


--------------enig20D90DCB7AF721DFFBCF46B8
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkjd4JgACgkQxJBTTnXAif7VIgCdFJttdd1ssaocpMbhqu15/vuM
8GMAn1IwAy37obaLoSIIeb4/SktLJ5tq
=v5rq
-----END PGP SIGNATURE-----

--------------enig20D90DCB7AF721DFFBCF46B8--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Franck Joncourt
Le #17355591
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig57678EA80130944DF6964E2A
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

[...]
Moi j'ai un truc du genre:

./inc/*.h
./src/*.c
./*.c
./Makefile

Je ne veux pas polluer ./inc et ./src







J'ai créer des modules config, daemon, cmdline ... pour le programme
principal fwknop (fwknopd).

[code]
$ find .
.
./config
./config/config.h
./config/config.c
./daemon
./daemon/daemon.h
./daemon/daemon.c
./fwknop
./fwknop/fwknop.h
./fwknop/fwknop.c
./fwknop/stdtypes.h
./Makefile
./cmdline
./cmdline/cmdline.c
./cmdline/cmdline.h
./net
./net/net.h
./net/net.c

$ make all
rm -f *.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c fwknop/fwknop.c -o fwknop.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c config/config.c -o config.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c daemon/daemon.c -o daemon.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c net/net.c -o net.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c cmdline/cmdline.c -o cmdline.o
gcc fwknop.o config.o daemon.o net.o cmdline.o -o fwknopd
[/code]

Avec un Makefile comme ceci:

Normalement je mets tous les headers dans le même répertoire ma is je
voulais essayer de cette façon.

[quote=Makefile]
CC = gcc
CFLAGS = -Wall -O0 -D__DEBUG
HEADERS = -I daemon -I config -I net -I cmdline -I fwknop
PROGRAM = fwknopd
vpath %.c cmdline:config:net:daemon:fwknop

%.o: %.c
$(CC) $(CFLAGS) $(HEADERS) -c $< -o $@

$(PROGRAM): fwknop.o config.o daemon.o net.o cmdline.o
$(CC) $^ -o $@

clean:
rm -f *.o

clean_all: clean
rm -f $(PROGRAM)

all: clean $(PROGRAM)

.PHONY: clean clean_all all
[/quote]

Donc à priori je dirais que la seule chose que tu as à changer ce sont
les variables.

J'espère que c'est le bon ce coup ci.
Je n'ai pas créé de répertoire objets car je ne m'en sort avec mon
Makefile autrement. Donc tous les .o arriveront à la racine où se trouve
le Makefile.

--
Franck Joncourt
http://debian.org - http://smhteam.info/wiki/
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE


--------------enig57678EA80130944DF6964E2A
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkjePn4ACgkQxJBTTnXAif5QMwCgt55cCfTmfKcGAtFIrc9G2kCb
heUAnjJGeS6erXeVMPeybr4HRPCLyPGa
=rn8v
-----END PGP SIGNATURE-----

--------------enig57678EA80130944DF6964E2A--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Gaëtan PERRIER
Le #17359821
Le Sat, 27 Sep 2008 16:08:44 +0200
Franck Joncourt
[...]
>>> Moi j'ai un truc du genre:
>>>
>>> ./inc/*.h
>>> ./src/*.c
>>> ./*.c
>>> ./Makefile
>>>
>>> Je ne veux pas polluer ./inc et ./src

J'ai créer des modules config, daemon, cmdline ... pour le programme
principal fwknop (fwknopd).

[code]
$ find .
.
./config
./config/config.h
./config/config.c
./daemon
./daemon/daemon.h
./daemon/daemon.c
./fwknop
./fwknop/fwknop.h
./fwknop/fwknop.c
./fwknop/stdtypes.h
./Makefile
./cmdline
./cmdline/cmdline.c
./cmdline/cmdline.h
./net
./net/net.h
./net/net.c

$ make all
rm -f *.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c fwknop/fwknop.c -o fwknop.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c config/config.c -o config.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c daemon/daemon.c -o daemon.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c net/net.c -o net.o
gcc -Wall -O0 -D__DEBUG -I daemon -I config -I net -I cmdline
-I fwknop -c cmdline/cmdline.c -o cmdline.o
gcc fwknop.o config.o daemon.o net.o cmdline.o -o fwknopd
[/code]

Avec un Makefile comme ceci:

Normalement je mets tous les headers dans le même répertoire mais je
voulais essayer de cette façon.

[quote=Makefile]
CC = gcc
CFLAGS = -Wall -O0 -D__DEBUG
HEADERS = -I daemon -I config -I net -I cmdline -I fwknop
PROGRAM = fwknopd
vpath %.c cmdline:config:net:daemon:fwknop

%.o: %.c
$(CC) $(CFLAGS) $(HEADERS) -c $< -o $@

$(PROGRAM): fwknop.o config.o daemon.o net.o cmdline.o
$(CC) $^ -o $@

clean:
rm -f *.o

clean_all: clean
rm -f $(PROGRAM)

all: clean $(PROGRAM)

.PHONY: clean clean_all all
[/quote]

Donc à priori je dirais que la seule chose que tu as à changer ce sont
les variables.

J'espère que c'est le bon ce coup ci.
Je n'ai pas créé de répertoire objets car je ne m'en sort avec mon
Makefile autrement. Donc tous les .o arriveront à la racine où se trouve
le Makefile.




Merci pour ton aide effectivement ça marche de cette manière et j'ai réussi a
le faire fonctionner avec les wildcard de cette manière:

CC=gcc
CFLAGS=-W -Wall -ggdb3
LDFLAGS EXEC=mon_prog
SRC= $(wildcard *.c) $(wildcard src/*.c)
SRCSSDIR=$(notdir $(SRC))
OBJ= $(SRCSSDIR:.c=.o)
INC_PATH=./itf/:./inc/
vpath %.c src

all: $(EXEC)

$(EXEC): $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)

%.o: %.c
@C_INCLUDE_PATH=$(INC_PATH) $(CC) -o $@ -c $< $(CFLAGS)


Merci pour le coup de main.

Gaëtan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Publicité
Poster une réponse
Anonyme