Vì vậy, xét hoàn toàn theo các tiêu chí được đặt ra trong câu hỏi, hệ thống xây dựng có vẻ phù hợp nhất có lẽ là waf - Python tinh khiết, cung cấp hỗ trợ cho C++ và các ngôn ngữ khác, nói chung, mạnh mẽ, không phải DSL.
Tuy nhiên, từ kinh nghiệm cá nhân của tôi, tôi thích CMake cho dự án C++ hơn. (Tôi đã thử CMake, SCons, và waf, và thích chúng theo thứ tự đó). CMake là một giải pháp chung, nhưng nó có hỗ trợ tích hợp cho C++ khiến nó trở nên đẹp hơn một giải pháp chung chung hơn khi bạn đang thực sự làm C++.
Mô hình xây dựng của CMake cho C++ là khai báo nhiều hơn và ít bắt buộc hơn, và do đó, với tôi, dễ sử dụng hơn.Cú pháp ngôn ngữ CMake không phải là tuyệt vời, nhưng việc xây dựng khai báo với cú pháp lẻ đánh bại một bản dựng bắt buộc bằng Python. Trong số ba, CMake cũng có vẻ có sự hỗ trợ tốt nhất cho những thứ "tiên tiến" như các tiêu đề được biên dịch trước. Việc thiết lập các tiêu đề được biên dịch trước đã giảm thời gian xây dựng lại của tôi xuống khoảng 70%.
Điểm cộng khác cho CMake bao gồm tài liệu phong phú và cộng đồng khá lớn. Nhiều thư viện nguồn mở có CMake xây dựng các tệp hoặc trong cây hoặc do cộng đồng CMake cung cấp. Có những dự án lớn đã sử dụng CMake (OGRE đến với tâm trí), và các dự án lớn khác, như Boost và LLVM, đang trong quá trình chuyển sang CMake.
Một phần vấn đề tôi tìm thấy khi thử nghiệm với hệ thống xây dựng là tôi đang cố gắng xây dựng plugin NPAPI trên OS X và hóa ra rất ít hệ thống xây dựng được thiết lập để cung cấp cho XCode sự kết hợp chính xác của cờ bắt buộc làm như vậy. CMake, nhận ra rằng XCode là một mục tiêu phức tạp và di chuyển, cung cấp một móc để tự thiết lập các lệnh trong các dự án XCode được tạo ra (và Visual Studio, tôi nghĩ). Điều này là rất thông minh như xa như tôi đang quan tâm.
Cho dù bạn đang xây dựng thư viện hay ứng dụng cũng có thể xác định hệ thống xây dựng nào là tốt nhất. Boost vẫn sử dụng hệ thống dựa trên mứt, một phần vì nó cung cấp sự hỗ trợ toàn diện nhất để quản lý các loại xây dựng phức tạp hơn "Gỡ lỗi" và "Phát hành". Hầu hết các thư viện tăng có năm hoặc sáu phiên bản khác nhau, đặc biệt là trên Windows, dự đoán mọi người cần các thư viện tương thích liên kết với các phiên bản CRT khác nhau.
Tôi không gặp bất kỳ sự cố nào với CMake trên Windows, nhưng tất nhiên số dặm của bạn có thể thay đổi. Có một GUI phong nha để thiết lập các phụ thuộc xây dựng, mặc dù nó là clunky để sử dụng cho việc xây dựng lại. May mắn thay, đó cũng là một khách hàng dòng lệnh. Những gì tôi đã giải quyết cho đến nay là có một Makefile bao bọc mỏng để gọi CMake từ một objdir; Sau đó, CMake tạo Makefiles trong objdir và Makefile ban đầu sử dụng chúng để thực hiện việc xây dựng. Điều này đảm bảo rằng mọi người không vô tình gọi CMake từ thư mục nguồn và làm lộn xộn kho lưu trữ của họ. Kết hợp với MinGW, "bánh sandwich CMake" này cung cấp trải nghiệm xây dựng đa nền tảng nhất quán đáng kể!
Tôi đang bối rối. Bạn nói "nó không cần phải hỗ trợ toàn bộ autotools suite". Điều này có nghĩa là câu hỏi của bạn nên được lặp lại: "Hệ thống xây dựng tốt nhất tiếp theo sau khi autoconf/automake là gì?" –
@William Pursell: Không. Tôi rõ ràng đã loại bỏ yêu cầu hỗ trợ autoconf và automake, vì nó được kết hợp chặt chẽ với Makefiles. –
Tôi không thấy bất kỳ điều gì sai với câu hỏi gốc hoặc thảo luận kết quả. Cho rằng câu hỏi này bây giờ là công cụ tìm kiếm dẫn đầu cho "hệ thống xây dựng tốt nhất", câu hỏi này nên được mở cửa trở lại. Tôi có thể hiểu việc đóng nó nếu cuộc thảo luận trên thực tế đã được đưa ra ý kiến, hoặc nếu nó thực sự đã thu hút spam, nhưng điều đó không đúng. – user1110743