2010-03-05 16 views
0

Je travaille sur un projet relativement gros qui utilise automake build system. Maintenant le problème est que j'ai besoin de lier le projet avec une bibliothèque d'un autre projet (cela fonctionne bien), mais j'ai aussi besoin d'inclure un en-tête de l'autre arbre source du projet (api.h).Ajouter un en-tête d'un projet différent à mon projet en utilisant automake

INCLUDES = [email protected][email protected]

dans Makefile.am ne fonctionne pas, car il y a des fichiers .h avec des noms coliding dans le répertoire source distante. Comment puis-je ajouter seulement le api.h? J'ai utilisé un lien symbolique dans le répertoire include du projet, mais maintenant j'ai besoin de pousser les sources dans un repo public et tout le monde travaille avec l'autre projet dans un répertoire différent, donc j'ai besoin d'utiliser le param .

Répondre

1

Vous ne voulez pas vous tromper Makefile.am ou votre configure.ac de quelque façon que ce soit. Si api.h est installé dans un emplacement standard (par exemple/usr/include), tout ce dont vous avez besoin est AC_CHECK_HEADERS ([api.h]) dans configure.ac. Si api.h est installé dans un emplacement non standard (par exemple/home/joe/include), la manière de le récupérer dans votre projet est déterminée au moment de la configuration. Lorsque vous exécutez configure, vous ajoutez l'argument CPPFLAGS = -I/home/joe/include à l'appel de configure. Vous n'indiquez pas l'emplacement non standard dans les fichiers de construction eux-mêmes.

Une autre alternative consiste à utiliser pkg-config, mais l'emplacement non standard de votre fichier d'en-tête sera toujours traité lorsque vous exécuterez configure. (Cette fois, en définissant PKG_CONFIG_PATH au lieu de CPPFLAGS)

+0

Oui, son emplacement n'est pas standard. Mais comment puis-je compiler les fichiers par rapport à l'en-tête? Je dois aussi avoir le chemin include pendant la compilation, sinon ça ne marchera pas. –

+0

Lorsque vous ajoutez CPPFLAGS = -I/path/to/include, vous indiquez au système de construction où il doit rechercher les fichiers d'en-tête. J'ai appelé -I/path/à/include comme argument pour $ CPP –

+0

Je sais, mais c'est exactement ce que ma question concerne. Comment puis-je le faire sans ajouter le chemin d'inclusion. Parce que c'est ce que je ne peux pas faire. –

0

Si vous avez des en-têtes avec les mêmes noms, vous pouvez en mettre au moins un dans un répertoire avec un nom différent et l'inclure en utilisant le nom du répertoire.

est ici une structure de répertoire exemple:

 
mylibrary/include/myblirary/api.h 

myproject/api.h 
myproject/main.cpp 

En main.cpp:

 
#include "api.h" 
#include "mylibrary/api.h" 

#include <boost/regex.hpp> 

Lors de la compilation:

g ++ -I mylibrary/include