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

Respostas:


112

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

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

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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.