2009-02-04 20 views
17

Tăng Jam là gì và Jam có đáng để di chuyển sang không?Tăng Jam là gì và Jam có đáng để di chuyển sang không?

Tôi hiểu rằng mứt là hệ thống xây dựng được xây dựng bởi lực lượng tuy nhiên tôi không chắc chắn làm thế nào mứt tăng & mứt thông thường là khác nhau.

Tôi cũng hy vọng có thể có ai đó trong cộng đồng SO đã cộng tác với nó và có thể làm nổi bật một số khác biệt và/hoặc lợi ích.

Trả lời

5

Vì mục đích của tôi, nó chỉ là thứ xây dựng thư viện tăng cường cho bạn, tôi không biết bạn có thể làm bất cứ điều gì khác với nó nên tôi không hiểu ý bạn là gì khi di chuyển đến nó. Và tôi xin lỗi nhưng tôi không biết mứt thường xuyên là gì. Vì không ai khác đã cung cấp một câu trả lời, tôi sẽ chỉ cung cấp sự hiểu biết của tôi về nó.

Tăng cường là tập hợp các lớp và chức năng cho C++ rất hữu ích cho các tác vụ khác nhau. Các lớp và các hàm của boost được nhóm lại thành các thư viện. Một số thư viện có tất cả mã của chúng trong các tệp tiêu đề mà bạn có thể sử dụng đơn giản bằng cách sử dụng câu lệnh #include preprocessor, trong khi các thư viện khác (chẳng hạn như thư viện hệ thống tệp hoặc thư viện biểu thức chính quy) có phần triển khai trong tệp .cpp.

Biên dịch các tệp .cpp này có thể mất độ tuổi (khoảng 30 phút tùy thuộc vào những gì bạn đang biên soạn) và nó sẽ là một nỗi đau thực sự nếu mất nửa giờ mỗi khi bạn muốn biên dịch lại chương trình của mình. Vì vậy, những gì họ đã làm chỉ dành cho những thư viện được lưu trữ một phần trong các tệp .cpp, bạn có thể biên dịch chúng thành tệp .lib, và đó là mục đích thúc đẩy mứt. Điều đó có nghĩa là bạn chỉ phải mất nửa giờ để biên dịch chúng một lần và từ đó bạn không bao giờ phải đợi nửa giờ nữa. Tuy nhiên, như bạn có thể tưởng tượng, mỗi thư viện tăng bao gồm nhiều tệp cpp và nhiều tệp tiêu đề, và có nhiều hương vị khác nhau của mỗi phiên bản gỡ lỗi, phiên bản phát hành, đa luồng, v.v. và vì vậy nó không phải là một quá trình đơn giản để tự biên dịch thư viện tăng. Đó là nơi tăng mứt đi vào. Bạn cho nó lệnh để biên dịch các thư viện và sau đó nó phát ra tất cả các lệnh cho bạn tới trình biên dịch, và vào cuối nó, bạn sẽ có một tập hợp các tệp .lib được biên dịch sẵn, một cho mỗi hương vị khác nhau của mỗi thư viện. Các tập tin tiêu đề bằng cách nào đó cho biết linker chứa các tập tin lib, vì vậy nếu bạn đã thiết lập đường dẫn đúng, thì hương vị chính xác của tập tin .lib được biên dịch trước sẽ tự động được liên kết với chương trình của bạn, do đó bạn tiết kiệm được 30 phút biên dịch.

Bạn có thể xem thư viện nào cần được biên dịch bằng cách tăng mứt và thư viện nào không bằng cách xem trang này: http://www.boost.org/doc/libs/1_37_0 - nếu thư viện không cần tệp lib (và do đó không yêu cầu bạn gây rối mứt đầu tiên), nó sẽ nói "Build & Link: Header only" trong khi nếu một thư viện yêu cầu bạn phải biên dịch trước một tập tin lib, nó sẽ nói "Build & Link: Automatic linking".

Ngoài ra, nếu bạn đang sử dụng Windows, bạn có thể tải xuống các tệp .lib được biên dịch trước để bạn không bao giờ phải sử dụng mứt tăng cường. Để có được điều đó, những gì bạn cần làm là truy cập trang www.boost.org, vào phần Bắt đầu và thực hiện theo tất cả các cách để đảm bảo bạn có mọi thứ được thiết lập chính xác. Một trong các liên kết trên phiên bản cửa sổ của trang đó cho bạn biết nơi tìm các tệp .lib được biên dịch trước.

+0

Chỉ muốn rõ ràng rằng tôi chỉ đăng bài này vì tôi nghĩ nó có thể hữu ích. Tôi đã không bao giờ sử dụng mứt nhưng nó đã được ngày và không ai trả lời anh chàng này, vì vậy tôi quyết định trả lời trong số ít những kiến ​​thức tôi có. –

+3

Các nhận xét khác (có thể được thêm sau) cho biết rằng Boost Jam là một hệ thống xây dựng; vì vậy nó vượt ra ngoài việc biên soạn các thư viện tăng cường. – Jaywalker

+0

Câu trả lời này chỉ là sai và không chính xác. –

9

Khi bạn nói, Boost Jam là một hệ thống xây dựng và có thể được sử dụng độc lập với bất kỳ thư viện tăng cường nào khác. Tôi không biết gì về Perforce Jam, nhưng theo hiểu biết của tôi, Boost jam rất giống nhau và hầu hết đều tương thích.

Sự khác biệt chính là Boost Jam thường đi kèm với Boost Build, một tập hợp các quy tắc kẹt được thiết kế cho các tác vụ phổ biến, ví dụ:biên dịch thư viện, chạy thử nghiệm đơn vị, tạo tài liệu doxygen, v.v.

So với các hệ thống xây dựng khác, Boost Jam/Boost Build được thiết kế để dễ dàng biên soạn các biến thể khác nhau. Vì vậy, nếu bạn muốn thay đổi cài đặt biên dịch từ gỡ lỗi sang bản phát hành hoặc đơn lẻ thành đa luồng, nó sẽ tự động xác định nhiều thay đổi.

Hạn chế là cú pháp rất khó, và bên ngoài trang web tăng cường, không có tài liệu hay. Nhưng tôi tưởng tượng Perforce Jam cũng tệ như vậy.

+1

Đồng ý, cú pháp và toàn bộ quá trình không phải là trực quan –

8

Với lựa chọn công cụ xây dựng, tôi sẽ không di chuyển sang mứt. Có các hệ thống xây dựng tốt hơn ngoài đó - CMake/SCons cho C/C++, qmake cho Qt, Ant cho Java, NAnt và MSBuild cho .NET, v.v. Chúng có thể không cao về mặt kỹ thuật nhưng chúng sẽ ít đau đớn hơn khi sử dụng đơn giản bởi vì nhiều người quen thuộc hơn với chúng (mặt khác, chúng có thể cao hơn về mặt kỹ thuật, dĩ nhiên là: D).

+0

+1 dành cho SCons. :-) – Parappa

+0

-3 cho SCons. Xem chuỗi blog gồm 3 phần này: http://www.electric-cloud.com/blog/2010/03/08/how-scalable-is-scons/ http://www.electric-cloud.com/blog/ 2010/07/21/a-second-look-at-scons-hiệu suất/http://www.electric-cloud.com/blog/2010/08/11/the-last-word-on-scons-performance/ –

+5

Tôi xin lỗi, tháng 3 năm 2009 cỗ máy thời gian của tôi bị trục trặc, nếu không tôi đã đi đến tháng 8 năm 2010, phát hiện ra bất kỳ vấn đề khả năng mở rộng nào, sau đó quay trở lại năm 2009 để không bao gồm :) dự án của bạn phát triển rất lớn, nhưng đối với hầu hết các dự án có quy mô vừa và nhỏ thì nó hoàn toàn ổn.Chỉnh sửa: Toàn tiết lộ - Tôi sử dụng CMake :) –

28

Tôi sử dụng Boost Jam cho phát triển đa nền tảng C++ của mình. Tôi chọn nó vì

  • Tôi muốn mã của tôi để xây dựng ở khắp mọi nơi Boost xây dựng,
  • nó sử dụng một ngôn ngữ khai báo tương đối đơn giản để xác định làm thế nào để xây dựng mục tiêu, và
  • nó có thể xây dựng tất cả các hương vị khác nhau của bạn mã nhị phân (ví dụ: gỡ lỗi so với phát hành, 32 bit so với 64 bit, msvc so với gcc) trong một lời gọi đơn lẻ với mức tối thiểu tuyệt đối của các ngoại lệ liên quan đến hương vị trong các khai báo xây dựng.

Bạn có thể tinh chỉnh quy tắc chung với cài đặt dành riêng cho hương vị, thay vì viết các quy tắc riêng cho từng hoán vị vị. Cú pháp không chính xác là những gì tôi đã chọn, nhưng nó không quá khó để làm quen với nó.

Bài viết này so sánh Tăng Jam để CMake, SCons, và Eclipse CDT: http://syrcose.ispras.ru/2009/files/04_paper.pdf

sự hiểu biết của tôi là Boost Jam là một nhánh của Perforce Jam duy trì bởi cộng đồng Boost, và điều đó chẳng đả Jam không tích cực duy trì nữa (số release notes có bản cập nhật cuối cùng vào tháng 4 năm 2003).

Tất nhiên, nếu bạn không quan tâm đến phát triển đa nền tảng, có nhiều cách dễ dàng hơn để đi, như những người khác đã đề cập ở đây. Cá nhân, tôi giữ ý nghĩa để xem lại CDT Eclipse; nó dường như không sử dụng được 5 năm trước, nhưng tôi nghe nó đã đi một chặng đường dài.

+0

Vì câu trả lời này đôi khi vẫn nhận được nhiều phiếu bầu, tôi muốn lưu ý rằng công việc tiếp theo của tôi đã chuyển sang CMake. Trong khi nó không hoàn hảo, tôi khuyên bạn nên CMake ngày hôm nay trên Boost Jam, do hỗ trợ IDE và phổ biến của nó/"nổi tiếng". Eclipse CDT rất hữu ích như một IDE, nhưng không cung cấp một hệ thống xây dựng. –

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