2010-11-09 3 views
71

Nouveau en C++; Compréhension de base des includes, des librairies et du processus de compilation. Avez-quelques-uns makefiles simples encore.Comment définir plusieurs chemin d'inclusion dans Makefile

Mon projet actuel implique l'utilisation d'une API DBInformix et j'ai besoin d'inclure des fichiers d'en-tête dans plusieurs répertoires non standard. Comment écrire ça? Havent a trouvé quelque chose sur le net, probablement parce que je n'ai pas utilisé de bons termes de recherche

Ceci est une façon que j'ai essayé (ne fonctionne pas). Juste pour montrer le makefile

LIB=-L/usr/informix/lib/c++ 
INC=-I/usr/informix/incl/c++ /opt/informix/incl/public 

default: main 

main: test.cpp 
     gcc -Wall $(LIB) $(INC) -c test.cpp 
     #gcc -Wall $(LIB) $(INC) -I/opt/informix/incl/public -c test.cpp 

clean: 
     rm -r test.o make.out 

Répondre

80

Vous devez préfixer chaque répertoire avec -I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public 
+0

Il ne fonctionne toujours pas pour moi, mais en cours d'exécution gcc fait manuellement. – NoBugs

2
INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public 

Merci pour votre écoute ... juste après l'affichage j'ai trouvé la possiblité manquant je ne l'avais pas encore essayé

63

Vous devez utiliser -I avec chaque répertoire. Mais vous pouvez toujours délimiter les répertoires avec des espaces si vous utilisez (GNU) make de foreach:

INC=$(DIR1) $(DIR2) ... 
INC_PARAMS=$(foreach d, $(INC), -I$d) 
+6

+ Voici ce que je suis venu chercher ici. '$ (foreach ,,)' –

+11

Ou plus court: 'INC_PARAMS = $ (INC:% = - I%)' avec [substitutions] (https://www.gnu.org/software/make/manual/html_node/Substitution -Refs.html). '$ (foreach ,,)' est plus lisible, mais les substitutions sont si communément utilisées qu'il est bon de se familiariser avec leur fonctionnement. – skalee

Questions connexes