Một trong những cách phổ biến để tổ chức thư mục dự án là nhiều hơn hoặc ít hơn như thế này:C++ nguồn dự án bố trí đang
MyLib +--mylib_class_a.h mylib_class_a.cpp mylib_library_private_helpers.h mylib_library_private_helpers.cpp MyApp +--other_class.h other_class.cpp app.cpp
app.cpp
:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Tất cả .h
và .cpp
file cho cùng một thư viện là trong cùng một thư mục. Để tránh va chạm tên, tên tệp thường là tiền tố có tên công ty và/hoặc tên thư viện. MyLib sẽ nằm trong đường dẫn tìm kiếm tiêu đề của MyApp, v.v. Tôi không phải là fan của tên tập tin tiền tố, nhưng tôi thích ý tưởng xem #include
và biết chính xác vị trí của tập tin header đó. Tôi không ghét phương pháp tổ chức các tập tin này, nhưng tôi nghĩ rằng nên có một cách tốt hơn.
Vì tôi đang bắt đầu một dự án mới, tôi muốn thu hút một số ý tưởng về tổ chức thư mục. Hiện nay tôi thích cấu trúc này thư mục:
ProjA +--include +--ProjA +--mylib +--class_a.h +--app +--other_class.h +--src +--mylib +--class_a.cpp library_private_helpers.h library_private_helpers.cpp +--app +--other_class.cpp app.cpp util.h
app.cpp
:
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
tập tin và tư nhân (chỉ hiển thị cho thư viện ngay lập tức) .h
tập tin được lưu trữ trong thư mục src (src đôi khi được gọi là lib). Các tệp tiêu đề công khai được tổ chức thành cấu trúc thư mục dự án/lib và được bao gồm qua <ProjectName/LibraryName/headerName.h>
. Tên tệp không có tiền tố gì cả. Nếu tôi cần gói MyLib để các nhóm khác sử dụng, tôi có thể thay đổi makefile của mình để sao chép các tệp nhị phân thích hợp và toàn bộ thư mục/ProjA.
Sau khi tệp được kiểm tra vào kiểm soát nguồn và mọi người bắt đầu làm việc với chúng, sẽ khó thay đổi cấu trúc thư mục. Nó là tốt hơn để có được nó ngay tại get-go.
Bất kỳ ai có kinh nghiệm tổ chức mã nguồn như thế này? Bất cứ điều gì bạn không thích về nó? Nếu bạn có một cách tốt hơn để làm điều đó, tôi rất muốn nghe về nó.
Tôi đồng ý rằng nó sẽ quá mức cần thiết ngay từ đầu. Mối quan tâm của tôi là khi dự án đi, và tăng trưởng đến một kích thước khá, không ai sẽ muốn dành thời gian để tổ chức lại tất cả các tập tin và thay đổi tất cả các đường dẫn bao gồm. –
Vâng, điều đó có thể đúng. Nhưng, bạn có vẻ muốn giữ mọi thứ theo thứ tự, vì vậy bạn có thể làm được! Tôi làm việc trong một công ty với khoảng 60 nhà phát triển được chia thành các nhóm. Một vài tuần trước, một số nhóm đã dành một vài ngày để sắp xếp lại các tệp của họ. Giữ cho mọi thứ được tổ chức là một quá trình liên tục .. một mã lập trình viên tái lập trình tốt khi nó được ra khỏi bàn tay, ví dụ như khi một tập tin mã quá lớn mà nó được khôn lanh để quản lý, họ nên chia nó. Nó chỉ giống với một thư mục của các tập tin. –
Những đội này không bao giờ có thể dự đoán cách đây 3 năm về cấu trúc mà họ cần bây giờ. Nếu họ đã cố gắng để đoán sau đó, tôi nghĩ rằng họ đã có thể đã kết thúc cần phải tổ chức lại anyway. Vì vậy, tôi không nên lo lắng về nó. Nếu bạn đang cố gắng phát triển một thực hành tốt khi bắt đầu một dự án, bạn nên dành thời gian của mình để tìm ra cách để tổ chức kiểm tra đơn vị mã và cách để chạy thử nghiệm như một phần của một bản dựng tự động ... bởi vì việc kiểm tra đơn vị chắc chắn là thứ khó có thể giới thiệu khi bạn đang tiến hành. –