2012-05-14 26 views
5

Tôi tự hỏi làm thế nào tôi nên quản lý một dự án C++ đang phát triển. Bây giờ, tôi đang phát triển một dự án với Netbeans và nó làm việc bẩn tạo ra makefiles. Dự án đã trở nên quá lớn và tôi đã quyết định chia nó thành một vài phần. Cách nào là tốt nhất để thực hiện việc này?Làm thế nào để quản lý dự án C++ đang phát triển

Tôi đang cố gắng sử dụng Scons làm hệ thống xây dựng của mình. Tôi đã có một số thành công với nó, nhưng tôi nên chỉnh sửa các kịch bản xây dựng mỗi khi tôi nối hoặc xóa các tập tin. Nó quá ngu si đần độn.

Vì vậy, tôi cần lời khuyên của bạn.

P.S. Bằng cách này, làm thế nào để một dự án lớn như google chrome làm điều này? Mọi người có sử dụng một số loại IDE để xây dựng các kịch bản được tạo ra chỉ để phân phối phần mềm không?

+0

Ở nhiều công ty, có một vị trí chuyên dụng được gọi là "Buildmeister". Đó là những công việc của người dân để duy trì môi trường xây dựng và thậm chí có thể kiểm tra đơn vị. – Mikhail

+0

@Misha, trách nhiệm này thường được gọi là Trình quản lý cấu hình. – Brady

+0

@Misha và công việc gì? Có một cách phù hợp để cho phép mọi nhà phát triển viết mã trong IDE ưa thích và Buildmeister sẽ chuyển đổi dự án của họ thành một bản dựng không? –

Trả lời

4

Tôi cũng sử dụng Netbeans cho C++ và biên dịch với SCons. Tôi sử dụng plugin jVi Netbeans thực sự hoạt động tốt.

Vì một số lý do plugin Netbeans Python không còn chính thức nữa, điều mà tôi hoàn toàn không hiểu. Bạn vẫn có thể nhận được nó mặc dù, và nó thực sự làm cho chỉnh sửa các SCON xây dựng kịch bản một kinh nghiệm tốt đẹp. Mặc dù Netbeans không có một plugin SCons (chưa?) Bạn vẫn có thể cấu hình lệnh xây dựng của nó để thực hiện SCons.

Để duy trì các kịch bản SCons tự động bởi IDE, tôi cũng không làm điều đó bằng tay.Nhưng nó không giống như tôi phải đối phó với điều này trên cơ sở hàng ngày, vì vậy tôi không thấy rằng điều quan trọng của nó, đặc biệt là xem xét cách dễ dàng để đọc các kịch bản được.

Dưới đây là xây dựng kịch bản trong SCons mà không giống nhau như đã đề cập trước đây cho CMake:

env = Environment() 
env.EnsurePythonVersion(2, 5) 
env.EnsureSConsVersion(2, 1) 

libTarget = env.SharedLibrary(target = 'foo', source = ['a.cpp', 'b.cpp', 'c.pp']) 
env.Program(target = 'bar', source = ['bar.cpp', libTarget]) 

Các SCons Glob() chức năng là một lựa chọn tốt đẹp, nhưng tôi có xu hướng né tránh tự động xây dựng tất cả các tệp trong một thư mục. Cũng vậy với việc liệt kê các thư mục con được xây dựng. Tôi đã bị đốt cháy đủ thời gian bởi điều này, và thích rõ ràng xác định các tập tin/dirs được xây dựng.

Trong trường hợp bạn nghe những tin đồn rằng SCons chậm hơn các lựa chọn thay thế khác, thì SCons GoFastButton có một số gợi ý có thể giúp ích.

+0

Buồn nhưng Netbeans của họ thực sự chưa có hỗ trợ SCons. Nhưng sr42 đã đưa ra ý tưởng tốt để sử dụng Glob(). Tôi nghĩ đó là những gì tôi thực sự thích. BTW, tại sao bạn muốn chỉ định rõ ràng? –

+0

@AlexPovar, ít phổ biến hơn với các tệp nguồn, nhưng với các thư mục con, tôi thường có nhiều phiên bản của thư mục (ví dụ: subdirA và subdirA.old) và nếu cả hai được biên dịch, bạn có thể nhận được xung đột hoặc hành vi thời gian chạy không mong muốn. gỡ lỗi, vì Im giả định nó chỉ biên dịch các thư mục nhất định. Một cái gì đó tương tự có thể xảy ra với các tập tin nguồn. Ngoài ra, khi thêm tệp nguồn mới, nhắc nhở rằng chúng cần được thêm vào hệ thống xây dựng *** và kiểm soát nguồn ***. – Brady

+0

bạn có sử dụng makefile trung gian để gọi các scons từ Netbeans không? –

4

Hầu hết các dự án lớn gắn bó với hệ thống xây dựng tự động xử lý tất cả các chi tiết lộn xộn cho chúng. Tôi là một fan hâm mộ lớn của CMake (đó là những gì KDE sử dụng cho tất cả các thành phần của họ) nhưng scons là một lựa chọn phổ biến khác. Trình soạn thảo của tôi (KDevelop) được cho là xử lý các dự án của CMake, nhưng tôi vẫn tự chỉnh sửa các kịch bản xây dựng vì nó không khó.

Tôi khuyên bạn nên học một công cụ thực sự tốt và gắn bó với nó (nhiều tài liệu sẵn có cho bất kỳ công cụ nào bạn sẽ quan tâm). Hãy chắc chắn rằng bạn cũng nhìn vào kiểm soát phiên bản nếu bạn chưa có (tôi có một điểm mềm cho git, nhưng Mercurial và Subversion cũng là lựa chọn rất phổ biến).


Một ví dụ đơn giản CMake:

project("My Awesome Project" CXX) 
cmake_minimum_required(VERSION 2.8) 
add_library(foo SHARED a.cpp b.cpp c.cpp) #we'll build an so file 
add_executable(bar bar.cpp) 
target_link_libraries(bar foo) #link bar to foo 

Điều này rõ ràng là một trường hợp tầm thường, nhưng nó rất dễ dàng để quản lý và mở rộng khi cần thiết.

+0

Có, quản lý kịch bản xây dựng bằng tay không phải là khó nhưng nó là khá đơn giản để quên thêm một cái gì đó. Ngay bây giờ có hai hệ thống xây dựng trong dự án. Makefiles có nguồn gốc cho Netbeans nhưng nó khó cho tôi để quản lý nó, và Scons đó là dễ sử dụng nhưng không có tích hợp IDE. Bằng cách nào các dự án KDevelop được xây dựng trên CMake? Và vâng, tôi sử dụng thủy ngân như DCVS. –

+0

KDevelop cũng được xây dựng bằng CMake và nó có thể duy trì các tệp dự án cho bạn. Như tôi đã nói, tôi chưa bao giờ để cho nó quản lý tôi cho tôi, nhưng tôi sẽ cập nhật câu trả lời của tôi với một ví dụ CMake đơn giản để bạn có thể thấy nó dễ dàng như thế nào. –

+0

CMake là ok, vấn đề chính của nó là cú pháp của nó (mà tôi luôn thấy không trực quan). Bạn không thể đánh bại một cái gì đó như SCons hoặc Waf sử dụng Python, một ngôn ngữ lập trình thực sự. Nó sẽ được chỉ là dễ dàng (nếu không dễ dàng hơn) để duy trì các tập tin SCons như trong CMake. – Brady

2

Tôi đang cố gắng sử dụng Scons làm hệ thống xây dựng. Tôi có một số thành công với nó, nhưng tôi nên chỉnh sửa tạo tập lệnh mỗi lần tôi thêm hoặc xóa tệp. Nó quá ngu si đần độn.

Tùy thuộc vào tập tin của bạn được tổ chức như thế nào, bạn có thể sử dụng, ví dụ, Glob() chức năng SCON để có được file nguồn như một danh sách mà không cần phải liệt kê tất cả các file cá nhân. Ví dụ: để xây dựng tất cả các tệp nguồn C++ thành tệp thực thi, bạn có thể làm:

Program('program', Glob('*.cpp')) 

Bạn có thể thực hiện tương tự trong CMake bằng lệnh của nó.

Và nếu bạn đang sử dụng SCON, vì đó là Python, bạn có thể viết mã Python tùy ý để tạo danh sách tệp nguồn của mình.

Bạn cũng có thể sắp xếp tệp thành nhiều thư mục và có các tệp xây dựng chi nhánh SCons (hoặc CMakeList.txt) mà kịch bản lệnh xây dựng chính có thể gọi.

+0

Nghe hay đấy. Tôi có tổ chức dự án theo phong cách Java với các gói. Nó có vẻ là khá tốt để làm việc với các thư mục thay vì các nguồn. –

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