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

Réponses:


112

Vous devez ajouter à chaque répertoire -I:

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

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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.