2009-09-05 32 views
9

Tôi gặp sự cố khi tổ chức tệp nguồn của mình.Tổ chức tệp nguồn

Tôi có bộ sưu tập mã nhỏ nhưng đang phát triển của riêng mình mà tôi muốn sử dụng trong các dự án khác nhau. Các tập tin và thư mục bố trí là một cái gì đó như thế này:

thư viện \ Sub1 \ source.h

thư viện \ Sub1 \ source.cpp

thư viện \ sub2 \ source.h

thư viện \ sub2 \ source.cpp

Một trong số vấn đề của tôi là tôi muốn bao gồm mã này, khi cần thiết, trong các dự án khác của tôi. Cho đến nay tôi đã sử dụng đường dẫn tuyệt đối để trỏ đến mã thư viện, nhưng phải có cách tốt hơn.

Hơn nữa, tôi cần phải thêm mọi tệp thư viện mà tôi sử dụng vào tệp của dự án Visual Studio để biên dịch chính xác.

Câu hỏi của tôi ngắn gọn là làm cách nào để khắc phục sự cố này? Cách thích hợp/tốt nhất để xử lý tình huống trên là gì.

+1

Tại sao bạn muốn đưa mã nguồn vào các dự án khác? Sử dụng các tệp nguồn được sử dụng trong một số dự án theo cách đặc biệt này là điên rồ - bạn nhất định phải thực hiện thay đổi cho một dự án phá vỡ một dự án khác. Và nó cũng loại bỏ một trong những lợi ích của việc sử dụng thư viện - bạn chỉ cần lib và bao gồm tệp - không phải là nguồn. Cố gắng xử lý kỷ luật hơn - nó sẽ tiết kiệm thời gian trong dài hạn và có thể trong ngắn hạn. Sử dụng hệ thống kiểm soát phiên bản và kho lưu trữ (git, subversion hoặc bất kỳ thứ gì). Đảm bảo bạn đã "phiên bản" đúng cách và phát hành phiên bản thử nghiệm/phân phối của các thư viện của bạn. – Dipstick

+1

Có lẽ đây phải là một câu hỏi wiki cộng đồng? Không có một câu trả lời, nhưng đây là một cuộc thảo luận về tổ chức tệp nguồn. –

Trả lời

3

Tôi không nghĩ rằng có cách thích hợp để thực hiện việc này - nó sẽ phụ thuộc vào chính xác những gì bạn đang cố gắng đạt được.

Dưới đây là một số điều bạn có thể không nhận thức được:

  • Bạn có thể sử dụng đường dẫn tương đối trong các dự án của bạn.

  • Bạn có thể sử dụng biến môi trường trong đường dẫn.

  • Bạn có thể thêm thư mục vào quy tắc tìm kiếm của Visual Studio.

Điều này cho phép bạn kiểm soát nhiều hơn nơi bạn đặt tệp bao gồm và nếu bạn thêm thư mục vào quy tắc tìm kiếm của Visual Studio bạn không phải bao gồm bất kỳ đường dẫn nào.

1

Đầu tiên: Thêm tất cả các giám đốc đã sử dụng vào dự án của bạn bao gồm đường dẫn. Thêm chúng dưới dạng đường dẫn tương đối nếu có thể.

Thứ hai: Bạn phải thêm tất cả thư viện/tệp nguồn đã sử dụng vào dự án của mình. Điều này có thể được thực hiện trong trình thám hiểm dự án, hoặc trong tab Project-> Linker. Trong trường hợp thứ hai, bạn sẽ phải thêm các thư mục được sử dụng vào các đường dẫn thư viện dự án.

Thông thường, không nên sử dụng đường dẫn trong #include chỉ thị.

3

Bạn không nên nói chung, thêm tệp nguồn từ thư viện trực tiếp vào các dự án khác. Biên dịch chúng tách biệt thành một thư viện và sử dụng chúng.

Đối với tổ chức cấu trúc thư mục của thư viện riêng của mình, ngay bây giờ tôi định cư trên một cái gì đó giống như cấu trúc sau đây

  • library1/widget.h
  • library1/private/onlyinlib.h
  • library1/private/widget.cpp

(và nếu có)

  • library1/tin/tài nguyên/widget.jpg
  • library1/private/dự án/widget.xcode

tôi đặt tất cả tiêu đề trực tiếp trong đường dẫn thư viện, và có một thư mục con private mà sẽ chứa tất cả mọi thứ đó là chỉ được sử dụng bởi thư viện, nhưng không bao giờ được chia sẻ/tiếp xúc.

Ưu điểm lớn nhất là mỗi dự án tôi bắt đầu chỉ cần một bao gồm đường dẫn chỉ vào thư mục chứa thư viện của tôi, sau đó mỗi (công cộng) bao gồm được thực hiện như

#include "library1/widget.h" 

tin bao gồm chỉ đơn giản là

#include "onlyinlib.h" 

này có một số ưu điểm:

  • Nếu thư viện mới được giới thiệu , không có rối tung với cài đặt dự án/trình biên dịch để có được các tiêu đề 'có thể nhìn thấy'.
  • Di chuyển sang các trình biên dịch/nền tảng khác cũng rất ít rắc rối.
  • Tiêu đề được tự động 'đặt tên', tức là bằng cách bao gồm một phần của đường dẫn, bên cạnh việc không thể có được một tên sản phẩm có bao gồm
  • giao diện công cộng hay không
2

Nếu bạn phải bao gồm mã của bên thứ ba thay vì chỉ liên kết với một phiên bản pre-biên dịch (ví dụ, có lẽ bạn cần phải thực hiện điều chỉnh hoặc tweaks để nó), hãy xem xét nhánh nó trong bất kỳ điều gì bạn sử dụng để kiểm soát nguồn:

  • /trunk/... --- mã của bạn tại đây
  • /thirdparty --- bản nguyên sơ của các thư viện thirdparty đi đây
    • /thirdparty/lib1
    • /thirdparty/lib2
    • v.v.
  • /trunk/lib1 --- nhánh từ:/thirdparty/lib1, có lẽ với những thay đổi cục bộ
    • này là phiên bản mà bạn xây dựng/link với.

Giả sử bạn sử dụng một hệ thống kiểm soát nguồn đàng hoàng, chương trình này sẽ cho phép bạn dễ dàng nâng cấp lên phiên bản mới hơn của các thư viện của bên thứ ba và sau đó hợp nhất những thay đổi với những thay đổi bạn đã thực hiện tại địa phương.

Ví dụ, giả sử "lib1" phát hành một phiên bản mới:

  • Commit sự thay đổi đến/thirdparty/lib1.
  • Merge từ/thirdparty/lib1 -/trunk/lib1
  • Fix bất kỳ xung đột nhập.

Đây là IMO, cách duy nhất để xử lý nâng cấp thư viện của bên thứ ba mà bạn đã thực hiện sửa đổi cục bộ.