Re: Règle pour Makefile
[ Nouvelle discussion
| Répondre au groupe
|
fr.comp.os.unix ]
Sujet: Re: Règle pour Makefile
De: thomas.nem...@betatech.invalid (Thomas Nemeth)
Groupes: fr.comp.os.unix
Organisation: BETAtech
Date: 15. May 2008, 15:00:05
References: 1 2
|
Matthieu Moy a tapoté :
> Thomas Nemeth <thomas.nemeth@betatech.invalid> writes:
>
>> Cependant j'aurais aimé faire en sorte que version.c ne soit
>> pas recompilé à chaque fois que je lance "make" mais à chaque
>> fois qu'au moins 1 fichier du projet est compilé...
>>
>> Y a-t-il un moyen simple de faire ça ?
>
> J'en vois au moins un :
>
> executable: $(OBJS)
> XXX > version.c
> gcc -c version.c
> gcc $(OBJS) version.o -o $@
>
> mais je trouve pas ça très beau.
Moi non plus :)
Déjà le XXX n'est pas nécessaire : le fichier n'a pas vocation à
être généré automatiquement. Il ne contient que, grosso-modo :
#include "config.h"
#define INFO PROGRAM" version "VERSION", build "BUILD".\n"
char * version_get_info(void)
{
return INFO;
}
Sachant que BUILD est passé en paramètre lors du make (-DBUILD=XXX)
D'autre part, version.c existant au préalable, mon makefile a déjà
une règle le compilant :
SRCS = $(shell ls *.c)
OBJS = $(SRCS:%.c=%.o)
[...]
%.o: %.c
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $<
> Ce qui est souvent fait dans ces cas là, c'est de dissocier la
> configuration de la compilation : on a une commande qui génère un
> Makefile ou un fichier de config du Makefile (le ./configure de
> beaucoup de logiciels), et on regarde le numéro de version à ce moment
> là. Ensuite, "make" ne s'en soucie plus.
Dans mon cas, ce n'est nullement de la configuration mais un système
de mise-à-jour automatique du numéro de build. En l'occurence, un
système à double commande (genre un ./build qui ferait appel à make)
ferait les commandes suivantes :
if make -n | grep -qv version. ; then
make
fi
Mais bon, j'aurais préféré gérer ça directement dans le makefile :
je ne souhaite pas avoir une pléthore de fichiers spécifique au
système de build dans mes projets :)
Thomas.

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|