2012-03-19 3 views
0

J'utilise le compilateur gcc.Compilation récursive en utilisant gcc

Mon arbre source du projet ressemble un peu comme ce

test$~: tree . 
. 
|-- folder 
| |-- hello.cpp 
| `-- hello.h 
`-- main.cpp 

1 directory, 3 files 
test$~: 

Le fichier main.cpp contient la fonction main() et toutes les fonctions invoquées par main.cpp se trouvent dans le répertoire nommé folder

Jusqu'à présent, dans toute ma petits projets je n'ai jamais eu à mettre du code source dans un sous-répertoire.

Ce que je cherche, en bref, est une commande gcc pour récursive compilation dans les sous-répertoires et leurs sous-répertoires et ainsi de suite ... Cette commande doit être appelée à partir du répertoire du projet de code.

+1

AFAIK, GCC n'a pas un tel mécanisme. Typiquement, ce genre de chose est géré par votre système de construction (par exemple Make). –

+0

Une idée intéressante. Avez-vous trouvé quelque chose dans le manuel pour suggérer que cela pourrait être possible. Autant que je sache, ce n'est pas possible, à moins d'énumérer tous les fichiers sur la ligne de commande. –

Répondre

0

Je ne pouvais pas vraiment tester sur une bibliothèque C++ que je n'ai pas un moment, mais cela devrait fonctionner:

find . -type f -iname *.cpp -execdir g++ {} \; 

Je ne me souviens pas de ce qui se passe lorsque l'option -o est omise pour gcc. Si c'est nécessaire, cela vous rapproche un peu plus d'une solution. Je recommanderais d'utiliser makefiles à la place si

+1

'g ++ -o a.out $ (trouver. -type f -iname * .cpp -print)'? C'est une mauvaise idée de le faire de toute façon. –

+0

@VladLazarenko Donc, cela va mettre toutes les données de compilation dans un. Out? –

+2

Cela devrait trouver tous les fichiers et les mettre dans la ligne de commande de gcc, qui les compilera et les reliera au binaire 'a.out'. Si nous parlons bash + linux. –