Re: [HS] Makefile
Le Sat, 27 Sep 2008 16:08:44 +0200
Franck Joncourt <franck.mail@dthconnex.com> a écrit:
> [...]
> >>> 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
Reply to: