2017-09-20 17 views
5

Tôi có một dự án lớn, nơi sử dụng cờ Swig -includeall có vẻ hợp lý. Tuy nhiên, có một số tệp nhất định mà tôi không muốn mở rộng, chủ yếu là các thư viện STL (ví dụ: vectơ và danh sách). Có thể sử dụng cờ -includeall, nhưng để liệt kê một số tệp nhất định khỏi việc mở rộng (như vectơ và danh sách)?Swig -includeall ngoại trừ ...

Trả lời

2

Tôi không phải là chuyên gia trong SWIG nhưng hãy xem cả hai mã documentation for latest version và mã nguồn (cụ thể là tệp Source/Modules/main.cxx, nơi đối số dòng lệnh được đọc), rõ ràng là tùy chọn đó không tồn tại (thậm chí không một ẩn).

Mặt khác, nếu bạn cảm thấy như bạn có thể sửa đổi mã nguồn khá dễ dàng để làm như vậy.

Bạn có thể thêm tùy chọn dòng lệnh mới trong tệp main.cxx để thêm tên tệp để loại trừ và sau đó so sánh các tên như vậy để tìm kết quả phù hợp. Bạn có thể thêm chức năng toàn cục vào tệp Source/Preprocessor/preprocessor.h, đã được bao gồm bởi main.cxx.

Mã cho tùy chọn -includeall nằm ở Source/Preprocessor/cpp.c. Trong tệp đó, cũng có một biến toàn cầu có tên là include_all được đặt thành 1 khi đối số tương tự được đặt trong dòng lệnh (nó sẽ hướng dẫn bạn tìm nơi thực hiện tùy chọn đó quá).

Bây giờ, trong Preprocessor_parse(...) chức năng bạn có thể tìm thấy nơi các tập tin tiêu đề được phân tích cú pháp (bắt đầu từ dòng 1715 cho phiên bản 3.0.12):

s1 = cpp_include(fn, sysfile); 
if (s1) { 
    /* ....... */ 
} 

Bạn sẽ được quan tâm trong String *Swig_last_file(void) chức năng, đó sẽ trở lại tên tệp của dòng tiêu đề vừa được phân tích cú pháp.

s1 = cpp_include(fn, sysfile); 
if (s1) { 
    int found = 0; 

    String* filename = Swig_last_file(); 
    /* Here find for a match in the exclusion list */ 

    if (!found) { /* keep working as usual */ 
    /* ....... */ 
    } /* if found, just ignore the include directive for that file */ 

    Delete(s1); 
} 

Tôi biết đó không phải là giải pháp đầy đủ nhưng hy vọng có thể hướng dẫn bạn để có được hành vi mong muốn.

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