Cách xác định một số đường dẫn bao gồm trong Makefile


96

Mới đối với C ++; Hiểu biết cơ bản về bao gồm, thư viện và quá trình biên dịch. Đã thực hiện một vài trang điểm đơn giản.

Dự án hiện tại của tôi liên quan đến việc sử dụng một api Informix DB và tôi cần bao gồm các tệp tiêu đề trong nhiều hơn một dirs không chuẩn. Làm thế nào để viết đó? Havent tìm thấy bất cứ thứ gì trên mạng, có thể là do tôi không sử dụng các cụm từ tìm kiếm tốt

Đây là một cách mà tôi đã thử (không hoạt động). Chỉ để hiển thị 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

Câu trả lời:


112

Bạn phải thêm trước mọi thư mục với -I:

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

1
Nó vẫn không hoạt động đối với tôi, mặc dù chạy gcc theo cách thủ công.
NoBugs

92

Bạn cần sử dụng -Ivới từng thư mục. Nhưng bạn vẫn có thể phân cách các thư mục bằng khoảng trắng nếu bạn sử dụng (GNU) make's foreach:

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

9
+ Đây là thứ tôi đến đây tìm kiếm. $(foreach,,)
Jonathon Reinhart

16
Hoặc ngắn hơn: INC_PARAMS=$(INC:%=-I%)thay thế . $(foreach,,)dễ đọc hơn, nhưng các thay thế thường được sử dụng đến mức bạn nên làm quen với cách hoạt động của chúng.
skalee

5
hoặc INC_PARAMS = $(addprefix -I,$(INC)).
Mã Minh

Tôi cũng đến đây $(foreach,,).
J. Doe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.