Comment définir plusieurs chemins d'inclusion dans Makefile

96

Nouveau sur C ++; Compréhension de base des includes, des bibliothèques et du processus de compilation. J'ai encore fait quelques makefiles simples.

Mon projet actuel implique l'utilisation d'une api informix DB et j'ai besoin d'inclure des fichiers d'en-tête dans plus d'un répertoire non standard. Comment écrire ça? Je n'ai rien trouvé sur le net, probablement parce que je n'ai pas utilisé de bons termes de recherche

C'est une façon ce 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
groovehunter
la source

Réponses:

112

Vous devez ajouter à chaque répertoire -I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public
Antoine Pélisse
la source
1
Cela ne fonctionne toujours pas pour moi, bien que l'exécution manuelle de gcc le fasse.
NoBugs
92

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

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)
Wilhelmtell
la source
9
+ C'est ce que je suis venu chercher ici. $(foreach,,)
Jonathon Reinhart
16
Ou plus court: INC_PARAMS=$(INC:%=-I%)avec des substitutions . $(foreach,,)est plus lisible, mais les substitutions sont si couramment utilisées qu'il est bon de se familiariser de toute façon avec leur fonctionnement.
skalee
5
ou INC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming
Je suis venu ici $(foreach,,)aussi.
J. Doe