6
votes

Comment obtenir des fichiers CPP à partir de différents répertoires compilés dans un dossier?

J'ai un certain nombre de fichiers C ++ distribués dans plusieurs dossiers.

obj/%.obj: a_library/%.cpp
    # ...

obj/%.obj: a_library/category1/%.cpp
    # ...


0 commentaires

5 Réponses :


1
votes

Une solution à laquelle je peux penser: il suffit de les construire sur une règle simple, puis de créer une "phase de collecte" déplacer les fichiers ".o" sur un seul dossier.

Faire une cible "collecte_objs" qui dépend de Votre $ (Objs), puis votre cible "principale" doit dépendre de "collect_objs".

Le travertisseur peut être effectué à l'aide de coque xxx

bien sûr Cela implique d'utiliser un package UNXUTILS (avec 'Rechercher' et 'MV') ou CYGWIN, car vous êtes sous Windows.

L'autre option consiste à générer explicitement les objectifs de votre fichier .c / .cpp , en utilisant un outil. Saisissez Python, traverser les répertoires de sources et pour chaque fichier .C / .cpple écrit xxx


0 commentaires

0
votes

Utilisez CMAKE pour effectuer la configuration de construction pour vous.

Il y a quelque temps, j'ai mis en place un exemple de projet simple sur Github .


0 commentaires

5
votes

Essayez de paramétrer VPATH : xxx

et pour ajouter une liste de fichiers complète (je vous recommanderais de répertorier explicitement les fichiers, n'utilisez pas $ (wildcard ...) fonction) et la liaison de l'application: xxx

$ (wildcard) a une tendance gênante à ramasser Tout ce qui concerne les répertoires, tels que des fichiers de test ou des temporaires d'un ponctuel (s'ils avaient un nom de montage: ~ fichier.cpp ).


0 commentaires

0
votes

La manière standard consiste à avoir un makefile dans chaque dossier et appeler récursivement avec inclure

C'était mes deux premiers hits sur 10 ^ 100:

http://owen.sj.ca .us / ~ rk / howto / diapositives / make / diapositives / makerecurs.html

http://www.gnu.org/ Savannah-Checkouts / GNU / Make / Manual / HTML_Node / Récursion.html


0 commentaires

0
votes

Pas strictement lié à cette question car il n'a pas à faire avec faire, bien que j'aimerais montrer comment je compile mes projets maintenant, 3 ans plus tard. Craftr est un système de méta-construction basé sur Python qui encourage les bâtiments indirects hors de l'arborescence (par exemple, un Construire code> dans l'arbre de travail). Construire des fichiers d'objet et la crête d'une bibliothèque statique est aussi simple que xxx pré>

exécutant Craftr -eb code> entraînera la structure suivante des produits de construction p>

Craftfile
file1.c
file2.c
category1/
  file3.c
  file4.c
build/
  my_project/
    obj/
      file1.o
      file2.o
      category1/
        file3.o
        file4.o
    libmyproj.a


0 commentaires