g++ compiler les fichiers sources existantes dans un autre répertoire
J'essaye de configurer un processus de construction à l'aide de makefiles, pour un C++ plugin que je suis en train de travailler sur. Je suis curieux de savoir si il y a moyen de faire de g++ compiler source les fichiers dans un autre répertoire. Ma motivation pour le faire, c'est d'éviter d'avoir à spécifier le chemin d'accès relatif pour chaque fichier source, comme je l'explique ci-dessous.
Mon projet de structure de répertoire ressemble à:
MyPlugin --> src --> Foo.cpp
--> Foo.h
--> Bar.cpp
--> Bar.cpp
--> build --> Makefile
Qui suit est une version allégée de mon Makefile:
SRC_PATH=../src
OUT_PATH=../bin
VPATH=${SRC_PATH}
FILES=Foo.cpp Bar.cpp
CC=g++
CFLAGS=-Wall -shared
all:
mkdir -p ${OUT_PATH}
${CC} ${CFLAGS} -I${SRC_PATH} ${FILES} -o ${OUT_PATH}/MyPlugin.so
En faisant cela, j'essaie d'éviter de définir la FILES
variable comme ci-dessous:
FILES=../src/Foo.cpp ../src/Bar.cpp
Quand j'ai essayé de courir make all
, g++ m'a donné une erreur. On dirait le chemin d'accès spécifié par -I
drapeau est utilisé uniquement pour la recherche #include
d fichiers.
g++: Foo.cpp: No such file or directory
g++: Bar.cpp: No such file or directory
Je ne peut pas utiliser des caractères génériques (*.cpp
) parce que je ne veux pas toujours tous les fichiers à être ramassé pour la compilation. Une autre alternative est de cd
dans le répertoire src, comme mentionné ici, et exécuter g++ à partir de là, mais ça ne marche que pour moi, si tous les fichiers sont dans le même répertoire (j'ai besoin de la sortie à un seul .so
fichier). J'ai aussi essayé le réglage de la variable d'environnement PATH
, mais qui ne semblent avoir aucun effet.
J'ai regardé dans le g++ aider, le faire de la documentation, et regarda StackOverflow des emplois tels que https://stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate-directory et gcc/g++: "No such file or directory" , mais ne pouvait pas trouver un solution que je pourrais utiliser. Pourriez-vous me suggérer une solution à ce problème?
Modifier L'exemple peut avoir été trompeuse. Dans cette dépouillé exemple, j'ai tous les fichiers source dans un répertoire, mais dans mon projet actuel, j'ai plusieurs sous-répertoires, et plusieurs fichiers dans chaque répertoire. Ainsi, bien que cd
ing à la src
répertoire des œuvres dans mon exemple ci-dessus, il ne fonctionnera pas dans mon projet (ou au moins, je voudrais savoir comment il fonctionne).
src
répertoire?Comme je l'ai mentionné, qui ne fonctionne que si tous les fichiers source sont dans le même répertoire. Je veux que tous les fichiers source pour être compilé en une seule .donc fichier.
OriginalL'auteur Masked Man | 2012-11-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir une deuxième variable pour le réelle fichiers source, comme ceci:
Alors au lieu d'utiliser
FILES
lors de la construction vous utilisezSOURCES
.OriginalL'auteur Some programmer dude
Si vous chercher à la sortie de Rendre sur votre console, vous aurez il regarde comme indiqué ci-dessous:
Comme vous pouvez le voir le chemin d'accès aux fichiers à compiler ne sont pas correctes. Vous l'avez déjà mentionné une méthode de réalisation de la présente, en préfixant le nom des fichiers source avec ../src (quel est le problème avec cette approche). Ou vous pouvez définir des FICHIERS comme indiqué ci-dessous:
À l'aide de la méthode ci-dessus, vous n'aurez pas besoin de manuel de modifier le chemin d'accès source, qui devrait changer.
src/Foo.cpp src/Bar.cpp
. Le g++-I
indicateur permet d'utiliser#include "Foo.h"
plutôt que#include "../foo/Foo.h"
. Je suis en train de voir si il y a une manière similaire pour les fichiers source. Comme je l'ai mentionné, l'approche fonctionne bien si tous les fichiers source sont dans le même répertoire, mais mon projet a plusieurs sous-répertoires et fichiers multiples dans chaque répertoire. Ça devient lourd. Si possible, je préfèrerais il suffit de spécifier le nom de fichier, et de configurermake
oug++
de savoir où il est.OriginalL'auteur dinesh
Vous pouvez mettre tous les répertoires source de VPATH comme ceci:
Puis quand g++ besoin d'un fichier source, à faire serait de chercher le fichier source le long de la VPATH.
Et essayer de les faire changer .cc de la liste de fichiers .o la liste:
Et ajouter les deux lignes suivantes dans votre fichier. Remarque, la deuxième ligne doit commencer par ONGLET.
VPATH
variable, mais qui ne semble pas être travail. La commande g++ (repris par faire) ressemble à:g++ -Wall -shared -I../src Foo.cpp Bar.cpp -o../bin/MyPlugin.so
Il n'a passrc/Foo.cpp src/Bar.cpp
J'ai ajouté deux étapes supplémentaires dans la réponse, s'il vous plaît essayer.
OriginalL'auteur TieDad