Як визначити кілька шляхів включення в Makefile


96

Новачок C ++; Базове розуміння включень, бібліотек та процесу компіляції. Ще зробив кілька простих графічних файлів.

Мій поточний проект передбачає використання apix DB api, і мені потрібно включати файли заголовків у більш ніж один нестандартний dir. Як це написати? Гавент знайшов щось у мережі, ймовірно, тому, що я не використовував хороших пошукових термінів

Це один із способів того, що я спробував (не працює). Просто щоб показати 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

Відповіді:


112

До кожного каталогу потрібно додати -I:

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

1
Це все ще не працює для мене, хоча запуск gcc робить це вручну.
NoBugs

92

Вам потрібно використовувати -Iкожен каталог. Але ви все одно можете розмежовувати каталоги пробілами, якщо ви використовуєте (GNU) make foreach:

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

9
+ Це те, що я прийшов сюди шукати. $(foreach,,)
Джонатан Райнхарт

16
Або коротше: INC_PARAMS=$(INC:%=-I%)із замінами . $(foreach,,)є більш читабельним, але заміни використовуються настільки часто, що було б добре ознайомитись із тим, як вони працюють.
skalee

5
або INC_PARAMS = $(addprefix -I,$(INC)).
Ма Мін

Я сюди $(foreach,,)теж приїхав .
Дж. Доу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.