2008-09-10 58 views
22

Tôi tự hỏi nếu có bất kỳ công cụ tốt đẹp và gọn gàng nào để thay thế GNU Autotools hoặc Make để xây dựng một dự án C++ rất lớn, đó là một điều phức tạp như vậy để sử dụng. Nó đơn giản để tạo ra tất cả các tệp mà Autotools yêu cầu nếu dự án nhỏ, nhưng nếu mã nguồn được chia thành nhiều thư mục, với nhiều thư viện của bên thứ ba và nhiều phụ thuộc, bạn rơi vào "Autotools Hell" ..Bất kỳ công cụ xây dựng tốt nào cho một dự án C++, có thể thay thế được?

cảm ơn bất kỳ đề xuất

Trả lời

18

Các Google V8 JavaScript Engine được viết bằng C++ và sử dụng SCons, vì vậy tôi đoán đó là một lá phiếu cho nó.

+2

Chúng tôi nhận thấy rằng SCons chậm một cách bất thường đối với các giải pháp Visual Studio lớn. Nó hoạt động rất tốt trên các hệ thống UNIX-ish. –

+0

@Kristopher: Bạn có thể xây dựng được không? Tôi đã không thấy đây là trường hợp trong kinh nghiệm của tôi. Nơi bạn tạo ra các tập tin scons từ các tập tin devstudio? – grieve

+2

Tôi thứ hai này: SCons là rất rất chậm khi nó được xây dựng lớn hơn. – jkp

18

CMake? (tạo ra makefiles, vì vậy về mặt kỹ thuật không phải là một thay thế như vậy).

Tôi cũng đã thấy "SCons" bật lên ở một vài địa điểm gần đây. Chưa tạo ra bất cứ thứ gì với nó.

+0

Nó không thay thế, nhưng CMake thay thế Autotools rất tốt – jturcotte

2

Nấu là một công cụ khác có thể được sử dụng để thay thế chế tạo. Tôi đã nhìn thấy một số công ty lớn sử dụng nó. Vì vậy, nó là doanh nghiệp sẵn sàng mặc dù trang web trông khá ngày.

http://miller.emu.id.au/pmiller/software/cook/

+0

Tôi sử dụng Luôn dành cho các dự án cá nhân nhỏ của tôi. Điều tôi thích về nó là tôi có thể tạo danh sách tên tập tin a.o, b.o, c.o, từ một danh sách hiện có như a.c, b.c, c.c. Thậm chí làm những điều buồn cười như từ a1.c, b1.c, c1.c tạo ra a2.c, b2.c, vv Makefiles dường như không thể làm điều này. Hạn chế chính: Cook có ngôn ngữ riêng của nó, vì vậy bạn không thể tận dụng các kỹ năng hiện có trong Python, Ruby, v.v. – DarenW

6

Chúng tôi sử dụng Jam cho một dự án C++ phức tạp - một lợi ích là nó là nền tảng chéo độc đáo. Thay vì tôi phun ra những lợi ích, chỉ cần xem nhanh liên kết này: http://www.perforce.com/jam/jam.html

+0

Chúng tôi di chuyển mứt từ makefiles sáu hoặc bảy năm trước đây. Phải mất một chút thời gian để có được những thứ lên và đi, nhưng một khi công việc ban đầu đã được thực hiện, nó đã được liền mạch từ bao giờ. Thiết lập các dự án mới gần như là tầm thường. –

+0

^di chuyển kẹt^di chuyển đến mứt –

15

Hãy xem waf.

Tôi nghĩ bạn có thể coi nó như là một sự thay thế hoàn toàn cho thực hiện và autotools. Nó được dựa trên python. Một điều tôi thích về waf là tập lệnh waf chính nó là ~ 100kb độc lập mà bạn đặt trong thư mục gốc của dự án của bạn. Điều này trái ngược với việc tạo ra hoặc rake và bạn bè, nơi mà hệ thống xây dựng phải được cài đặt trước. Bạn phải cài đặt python> = 2.3.

~$ ./waf configure && ./waf && ./waf install 

Tương đương Waf của Makefiles là tệp wscript. Nó là một tập lệnh python waf đọc, và nó định nghĩa ít nhất 3 hàm: set_options(), configure(conf)build(bld). Bạn có thể đoán những gì từng người trong số họ làm.

Để khởi động, tôi khuyên bạn nên tìm trong các tệp demo/cpp/* trong bản phân phối nguồn. Ngoài ra, hãy xem tệp doc/waf.pdf; đó là một tài liệu dài 12 trang sẽ giúp bạn nhanh chóng và hoạt động.

+0

Scons cũng cung cấp một phiên bản "không cài đặt" ... có trọng lượng ở 5.5KB ... – paxos1977

+2

5.5KB? Hãy thử 2,1 * MB * !! – richq

+2

SCons cũng là con chó chậm. Tôi đã sử dụng nó từ một năm trở lên và muốn chuyển sang Waf ASAP. – jkp

5

Noel Llopis đã viết một vài bài báo so sánh các hệ thống xây dựng. Phần 1 của "Nhiệm vụ cho hệ thống xây dựng hoàn hảo" là http://gamesfromwithin.com/the-quest-for-the-perfect-build-system. Phần 2 theo dõi trên cùng một trang. Việc thử lại Scons được báo cáo theo số http://gamesfromwithin.com/?p=104.

Kết luận: Mật độ quá chậm ... Jam là người chiến thắng.

+1

Bài viết đó là từ năm 2005, do đó, nó là khá ngày. – JesperE

+0

Đúng. Có những thử nghiệm mới hơn của SCons mặc dù, đó là từ cuối năm ngoái. Chỉ cần cập nhật liên kết bị hỏng. –

+0

Liên kết đầu tiên dường như đã chết. – shuttle87

2

Tôi đã sử dụng SCons trên c lớn ++ dự án (trên cả Linux và Windows), và nó hoạt động rất tốt.

scons all -j8 (trong đó biên dịch tệp đối tượng song song) rất tuyệt!

1

Tôi sử dụng bakefile cho quá trình xây dựng của mình và tôi đã trở thành một người hâm mộ lớn!

Tôi không bao giờ phải tự viết Makefile nữa, hãy để các tập lệnh tự động chạy độc lập GNU. Tất cả những gì tôi phải làm là cung cấp tệp XML mô tả mục tiêu xây dựng. Bakefile có thể chuyển đổi này vào một Makefile mà được tất cả các (header file) phụ thuộc nào đúng vv, nơi mà các định dạng Makefile khác nhau có thể được lựa chọn (dán danh sách từ tài liệu):

available formats are: 
    autoconf  GNU autoconf Makefile.in files 
    borland  Borland C/C++ makefiles 
    dmars   Digital Mars makefiles 
    dmars_smake Digital Mars makefiles for SMAKE 
    gnu   GNU toolchain makefiles (Unix) 
    mingw   MinGW makefiles (mingw32-make) 
    msevc4prj  MS eMbedded Visual C++ 4 project files 
    msvc   MS Visual C++ nmake makefiles 
    msvc6prj  MS Visual C++ 6.0 project files 
    msvs2003prj MS Visual Studio 2003 project files 
    msvs2005prj MS Visual Studio 2005 project files 
    symbian  Symbian development files 
    watcom  OpenWatcom makefiles 
    xcode2  Xcode 2.4 project files 

Tôi thường sử dụng autoconf tùy chọn và nó viết các tập lệnh autotools GNU gây phiền nhiễu cho tôi. Tôi đã phải điều chỉnh kịch bản configure.ac để cấu hình tìm thấy một thư viện nhất định trên bất kỳ hệ thống nào. Nhưng nó không quá tệ. Bắt các script autoconf theo cách này là tốt đẹp, bởi vì tôi không phải tự viết tất cả, và khi tôi phân phối dự án của mình, nó sẽ trông như thể tôi đã viết chúng, và người dùng vẫn có thể xây dựng dự án của tôi được cung cấp, với

./configure && make && make install 
+0

Dường như dự án này không được duy trì tích cực nữa? – sivabudh

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