วิธีกำหนดเส้นทางรวมหลายรายการใน Makefile


99

ใหม่สำหรับ C ++; ความเข้าใจพื้นฐานของรวมไลบรารีและกระบวนการคอมไพล์ ทำ makefiles ง่าย ๆ ยัง

โครงการปัจจุบันของฉันเกี่ยวข้องกับการใช้ API ฐานข้อมูลข้อมูลและฉันจำเป็นต้องรวมไฟล์ส่วนหัวใน dirs ที่ไม่เป็นมาตรฐานมากกว่าหนึ่ง จะเขียนยังไงดี? ยังไม่พบสิ่งใดในเน็ตอาจเป็นเพราะฉันใช้คำค้นหาไม่ดี

นี่เป็นวิธีหนึ่งที่ฉันพยายาม (ไม่ได้ผล) เพียงเพื่อแสดง 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

คำตอบ:


117

คุณต้องนำหน้าทุกไดเรกทอรีด้วย-I:

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

1
มันยังใช้ไม่ได้สำหรับฉันแม้ว่าการเรียกใช้ gcc ด้วยตนเองก็ทำได้
NoBugs

94

คุณต้องใช้-Iกับแต่ละไดเร็กทอรี แต่คุณยังคงสามารถคั่นไดเร็กทอรีด้วยช่องว่างได้หากคุณใช้ (GNU) make's foreach:

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

18
หรือสั้น: INC_PARAMS=$(INC:%=-I%)กับการแทน $(foreach,,)สามารถอ่านได้มากกว่า แต่การแทนที่มักใช้กันมากจึงควรทำความคุ้นเคยกับวิธีการทำงาน
skalee

5
หรือINC_PARAMS = $(addprefix -I,$(INC)).
Ma Ming
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.