Come definire diversi percorsi di inclusione in Makefile


96

Nuovo in C ++; Comprensione di base di include, librerie e processo di compilazione. Ho già fatto alcuni semplici makefile.

Il mio progetto attuale prevede l'utilizzo di un'API DB informix e ho bisogno di includere file di intestazione in più directory non standard. Come scriverlo? Non ho trovato nulla in rete, probabilmente perché non ho utilizzato buoni termini di ricerca

Questo è un modo in cui ho provato (non funzionante). Solo per mostrare il 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

Risposte:


112

Devi anteporre a ogni directory -I:

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

1
Ancora non funziona per me, anche se l'esecuzione manuale di gcc lo fa.
NoBugs

92

È necessario utilizzare -Icon ogni directory. Ma puoi ancora delimitare le directory con spazi bianchi se usi make (GNU) foreach:

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

9
+ Questo è quello che cercavo qui. $(foreach,,)
Jonathon Reinhart

16
O più breve: INC_PARAMS=$(INC:%=-I%)con le sostituzioni . $(foreach,,)è più leggibile, ma le sostituzioni sono così comunemente usate che è comunque utile familiarizzare con il loro funzionamento.
skalee

5
o INC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming

Anch'io sono venuto qui $(foreach,,).
J. Doe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.