Como definir vários caminhos de inclusão no Makefile

96

Novo em C ++; Conhecimento básico de includes, bibliotecas e processo de compilação. Fiz alguns makefiles simples ainda.

Meu projeto atual envolve o uso de uma API informix DB e preciso incluir arquivos de cabeçalho em mais de um diretório não padronizado. Como escrever isso? Não encontrei nada na rede, provavelmente porque não usei bons termos de pesquisa

Esta é uma maneira que eu tentei (não funciona). Só para mostrar o 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
fonte

Respostas:

112

Você deve preceder cada diretório com -I:

INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public
Antoine Pelisse
fonte
1
Ainda não funciona para mim, embora executar o gcc manualmente faça isso.
NoBugs de
92

Você precisa usar -Icom cada diretório. Mas você ainda pode delimitar os diretórios com espaços em branco se usar make (GNU) foreach:

INC=$(DIR1) $(DIR2) ...
INC_PARAMS=$(foreach d, $(INC), -I$d)
Wilhelmtell
fonte
9
+ É isso que vim aqui procurar. $(foreach,,)
Jonathon Reinhart
16
Ou mais curto: INC_PARAMS=$(INC:%=-I%)com substituições . $(foreach,,)é mais legível, mas as substituições são tão comumente usadas que é bom familiarizar-se como funcionam de qualquer maneira.
Skalee
5
ou INC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming
Eu vim aqui $(foreach,,)também.
J. Doe