Makefile : Construire dans un répertoire distinct de l'arbre
Mon projet (un langage interprété) a une bibliothèque standard composé par plusieurs fichiers, chacun d'entre eux sera construit dans une .donc, bibliothèque dynamique que l'interprète de charge sur demande de l'utilisateur (avec une directive d'importation).
Chaque fichier source est situé dans un sous-répertoire qui représente son "espace de noms", par exemple :
Le processus de construction est de créer une "génération" de répertoire, puis lors de chaque fichier est de la compilation a la création de son espace de noms de répertoire à l'intérieur de la "construire" un, par exemple, lors de la compilation de
std/io/network/tcp.cc
il exécuter une commande mkdir avec
mkdir -p build/std/io/network
Le Makefile extrait est :
STDSRC=stdlib/std/hashing/md5.cc \
stdlib/std/hashing/crc32.cc \
stdlib/std/hashing/sha1.cc \
stdlib/std/hashing/sha2.cc \
stdlib/std/io/network/http.cc \
stdlib/std/io/network/tcp.cc \
stdlib/std/io/network/smtp.cc \
stdlib/std/io/file.cc \
stdlib/std/io/console.cc \
stdlib/std/io/xml.cc \
stdlib/std/type/reflection.cc \
stdlib/std/type/string.cc \
stdlib/std/type/matrix.cc \
stdlib/std/type/array.cc \
stdlib/std/type/map.cc \
stdlib/std/type/type.cc \
stdlib/std/type/binary.cc \
stdlib/std/encoding.cc \
stdlib/std/os/dll.cc \
stdlib/std/os/time.cc \
stdlib/std/os/threads.cc \
stdlib/std/os/process.cc \
stdlib/std/pcre.cc \
stdlib/std/math.cc
STDOBJ=$(STDSRC:.cc=.so)
all: stdlib
stdlib: $(STDOBJ)
.cc.so:
mkdir -p `dirname $< | sed -e 's/stdlib/stdlib\/build/'`
$(CXX) $< -o `dirname $< | sed -e 's/stdlib/stdlib\/build/'`/`basename $< .cc`.so $(CFLAGS) $(LDFLAGS)
J'ai deux questions :
1 - Le problème est que la commande make, je ne sais pas vraiment pourquoi, n'est-ce pas vérifier si un fichier a été modifié et lancer le processus de construction sur TOUS les fichiers de n'importe quoi, donc si j'ai besoin de construire un seul fichier, je dois construire tous ou d'utiliser la commande :
make path/to/single/file.so
Est-il un moyen pour résoudre ce problème?
2 - Aucun moyen de le faire dans un "nettoyeur" sans avoir à distribuer tous les répertoires de construction avec des sources?
Grâce
Vous devez vous connecter pour publier un commentaire.
Pour 1) le problème est que la cible de la règle (stdlib/quelque chose.donc) n'est pas exactement ce que la règle fait (build/quelque chose.donc), afin de Faire toujours pense qu'il doit en faire la cible. Cela devrait résoudre le problème (je suis en utilisant GNUMake):
Pour 2), je ne suis pas sûr de ce que tu veux dire. Si vous voulez construire la structure de répertoire que vous décrivez, cela permettra de le faire.