OVH Cloud OVH Cloud

[makefile] sous-répertoires

4 réponses
Avatar
gregg
Bonsoir,

je cherche à écrire un makefile, sous FreeBSD, mais tout en gardant une
syntaxe portable (pas uniquement pmake donc)

Je sais écrire un makefile normal, mais sur ce coup là, j'ai un nombre
assez conséquent de sous-répertoires (sur 4 niveaux).

J'aimerais également me passer d'autoconf et consorts.
Est-il possible de spécifier les sous-répertoires à parcourir dans un
Makefile "normal" ?

merci,
gregg

4 réponses

Avatar
Laurent Wacrenier
gregg écrit:
J'aimerais également me passer d'autoconf et consorts.
Est-il possible de spécifier les sous-répertoires à parcourir dans un
Makefile "normal" ?


'make' faire ce qu'on lui dit de faire. Met des 'Makefile' partout et
fait des 'cd'.

cible:
cd rep1 && ${MAKE} ${MAKEFILAGS} cible

Avatar
no
On Thu, 15 Jan 2004 23:37:11 +0100, gregg wrote:

Bonsoir,

je cherche à écrire un makefile, sous FreeBSD, mais tout en gardant une
syntaxe portable (pas uniquement pmake donc)

Je sais écrire un makefile normal, mais sur ce coup là, j'ai un nombre
assez conséquent de sous-répertoires (sur 4 niveaux).

J'aimerais également me passer d'autoconf et consorts.
Est-il possible de spécifier les sous-répertoires à parcourir dans un
Makefile "normal" ?



Si tu utilises GNU make, tu as l'option -C qui doit faire ça non ?


-C dir
Change to directory dir before reading the makefiles or doing any-
thing else. If multiple -C options are specified, each is inter-
preted relative to the previous one: -C / -C etc is equivalent to
-C /etc. This is typically used with recursive invocations of
make.



Avatar
gregg
no wrote:

Si tu utilises GNU make, tu as l'option -C qui doit faire ça non ?


( -C dispo sous make/pmake aussi)

Oui, mais je voudrais faire ça dans le makefile, plutôt que d spécifier
sur la ligne de commande.

Il y a bien une directive, .PATH mais elle ne semble pas fonctionner (il ne trouve pas la seconde source,
située dans un sous répertoire).

Comme le post précédent le conseillait, il y a possibilité de faire ds
MAkefiles dans chaque sous-rép et les appeler ensuite "tout en haut".
Mais je ne trouve pas ça très pratique.

D'autant que j'ai des modules qui font appels à d'autres situés dans
plusieurs autres répertoires...


Humph. C'est ch** quand même.
Ou alors passer par un ./configure, afin d'obtenir le Makefile qui va bien ?

Avatar
Pascal Bourguignon
gregg writes:

Bonsoir,

je cherche à écrire un makefile, sous FreeBSD, mais tout en gardant
une syntaxe portable (pas uniquement pmake donc)

Je sais écrire un makefile normal, mais sur ce coup là, j'ai un nombre
assez conséquent de sous-répertoires (sur 4 niveaux).

J'aimerais également me passer d'autoconf et consorts.
Est-il possible de spécifier les sous-répertoires à parcourir dans un
Makefile "normal" ?

merci,
gregg


Voir le papier: "Recusive Make Considered Harmful" de Peter Miller,
http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html


# Program makefile:
#-----------------------------------------------------------------------

MODULES := ant bee

# Look for include files in each of the modules:
CFLAGS += $(patsubst %,-I%,$(MODULES))

# Each module will add to this:
SRC :
# Extra libraries if required:
LIBS :
# Include the description for each module:
include $(patsubst %,%/module.mk,$(MODULES))

# Determine the object files:
OBJ := $(patsubst %.c,%.o,$(filter %.c,$(SRC)))
$(patsubst %.y,%.o,$(filter %.y,$(SRC)))

# Link the program:
prog: $(OBJ)
$(CC) -o $@ $(OBJ) $(LIBS)

# Include the C include dependencies:
include $(OBJ:.o=.d)

# Calculate C include dependencies:
%.d: %.c
depend.sh `dirname $*.c` $(CFLAGS) $*.c > $*.d

#-----------------------------------------------------------------------





# ant/module.mk
#-----------------------------------------------------------------------
SRC += ant/main.c
#-----------------------------------------------------------------------





# bee/module.mk
#-----------------------------------------------------------------------
SRC += bee/parse.y
LIBS += -ly
%.c %.h: %.y
$(YACC) -d $*.y
mv y.tab.c $*.c
mv y.tab.h $*.h
#-----------------------------------------------------------------------


--
__Pascal_Bourguignon__ http://www.informatimago.com/
There is no worse tyranny than to force a man to pay for what he doesn't
want merely because you think it would be good for him.--Robert Heinlein
http://www.theadvocates.org/