[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: