2012-09-29 28 views
26

Tôi có một dự án (một thư viện) được chia nhỏ thành một vài thư mục có mã trong đó. Tôi muốn tìm kiếm g ++ cho các tệp tiêu đề trong thư mục gốc của dự án, vì vậy tôi có thể tránh các đường dẫn bao gồm khác nhau cho cùng một tệp tiêu đề trên nhiều tệp nguồn.Làm cách nào để thực hiện tìm kiếm g ++ cho các tệp tiêu đề trong một thư mục cụ thể?

Chủ yếu, các thư mục root/ có thư mục con A/, B/C/, tất cả đều có .hpp.cpp tập tin bên trong. Nếu một số tệp nguồn trong A muốn bao gồm file.hpp, trong B, nó sẽ phải thực hiện như sau: #include "../B/file.hpp". Tương tự cho một tệp nguồn khác trong C. Nhưng, nếu bản thân có thư mục con với các tệp cần file.hpp, thì nó sẽ không nhất quán và sẽ gây ra lỗi nếu tôi quyết định di chuyển tệp (vì đường dẫn bao gồm "../../B/file.hpp") .

Ngoài ra, điều này cũng cần phải hoạt động từ các dự án khác, nằm bên ngoài root/. Tôi đã biết rằng có một tùy chọn để tự sao chép tất cả các tập tin tiêu đề của tôi vào một thư mục tìm kiếm mặc định, nhưng tôi muốn làm điều này theo cách tôi mô tả.

Chỉnh sửa: tất cả các chương trình sử dụng thư viện chỉ được biên dịch với g++ prog.cpp lib.a -o prog. Điều đó có nghĩa là vĩnh viễn đặt đường dẫn bao gồm cho g ++!

Trả lời

35

A/code.cpp

#include <B/file.hpp> 

A/a/code2.cpp

#include <B/file.hpp> 

Compile sử dụng:

g++ -I /your/source/root /your/source/root/A/code.cpp 
g++ -I /your/source/root /your/source/root/A/a/code2.cpp 

Edit:

Bạn có thể sử dụng môi trường biến để thay đổi đường dẫn g ++ tìm đầu er tập tin. Từ trang người đàn ông:

Một số biến môi trường bổ sung ảnh hưởng đến hành vi của bộ xử lý trước .

CPATH 
    C_INCLUDE_PATH 
    CPLUS_INCLUDE_PATH 
    OBJC_INCLUDE_PATH 

giá trị của mỗi biến là một danh sách các thư mục cách nhau bởi một ký tự đặc biệt, giống như PATH, trong đó để tìm kiếm tiêu đề tập tin. Ký tự đặc biệt, "PATH_SEPARATOR", phụ thuộc vào mục tiêu và được xác định tại thời gian xây dựng GCC. Đối với các mục tiêu dựa trên Microsoft Windows, là dấu chấm phẩy và hầu như tất cả các mục tiêu khác là dấu hai chấm.

CPATH chỉ định danh sách các thư mục cần tìm kiếm như được chỉ định với -I, nhưng sau bất kỳ đường dẫn nào được cung cấp với tùy chọn -Tôi trên dòng lệnh . Biến môi trường này được sử dụng bất kể ngôn ngữ nào đang được xử lý trước.

Các biến môi trường còn lại chỉ áp dụng khi tiền xử lý ngôn ngữ cụ thể được chỉ định. Mỗi chi tiết chỉ định một danh sách các thư mục là được tìm kiếm như được chỉ định với -isystem, nhưng sau bất kỳ đường dẫn nào được cung cấp cùng với tùy chọn hệ thống trên dòng lệnh.

Trong tất cả các biến này, phần tử trống chỉ thị trình biên dịch tìm kiếm thư mục làm việc hiện tại của nó. Các phần tử trống có thể xuất hiện ở đầu hoặc cuối đường dẫn. Ví dụ, nếu giá trị của CPATH là ":/special/include", có cùng tác dụng với -I. -I/đặc biệt/bao gồm.

Có nhiều cách bạn có thể thay đổi biến môi trường. Trên bash nhắc bạn có thể làm điều này:

$ export CPATH=/your/source/root 
$ g++ /your/source/root/A/code.cpp 
$ g++ /your/source/root/A/a/code2.cpp 

Bạn có thể tất nhiên thêm này trong Makefile, vv

+0

Xin chào, tôi đã nêu câu hỏi mà không có một chi tiết quan trọng nào, vui lòng xem chỉnh sửa, cảm ơn! – corazza

+0

@Bane, thay đổi mọi thứ :-). Tôi đã chỉnh sửa câu trả lời của mình để bao gồm nhiều tùy chọn hơn có thể được sử dụng. – Vikas

+0

Điều đó có vẻ là những gì tôi đang tìm kiếm. Làm thế nào chính xác tôi có thể chỉnh sửa những? (Với lệnh CLI, nghĩa là tôi cần bổ sung quy tắc cài đặt của tệp makefile.) – corazza

0

Headers kèm #include <> sẽ được tìm kiếm trong tất cả các thư mục mặc định, nhưng bạn cũng có thể thêm vị trí của bạn trong đường dẫn tìm kiếm với dòng lệnh -I arg.

tôi thấy chỉnh sửa của bạn, bạn có thể cài đặt tiêu đề của bạn trong vị trí mặc định thường

/usr/local/include 
libdir/gcc/target/version/include 
/usr/target/include 
/usr/include 

Xác nhận với tài liệu biên dịch mặc dù.

+0

Vâng, tôi biết, nhưng vui lòng xem bản chỉnh sửa. – corazza

+0

Bạn thấy cài đặt ở trên bao gồm các vị trí mặc định để có độ phân giải nhanh. – NiladriBose

12
gcc -I/path -L/path 
  • -I /path đường dẫn đến bao gồm, gcc sẽ tìm .h file trong đường dẫn này

  • -L /path chứa tập tin thư viện, .a, .s o

0

nó đơn giản, sử dụng "-B" tùy chọn để thêm .h tập tin 'dir để tìm kiếm đường dẫn.

Ví dụ: g ++ -B /header_file.h your.cpp -o bin/your_command

Các vấn đề liên quan