2013-01-09 29 views
12

Tôi tìm thấy chủ đề tương tự: What are the differences between Autotools, Cmake and Scons?, nhưng câu hỏi của tôi hơi khác và tôi nghĩ rằng câu trả lời cũng có thể khác.cmake vs waf cho dự án C++

Tôi tìm thấy rất nhiều bài viết nói rằng waf là unstalbe (thay đổi API), chưa sẵn sàng để sản xuất vv (nhưng tất cả các bài viết này là 2 hoặc 3 tuổi).

nào sau đây xây dựng các công cụ nên được sử dụng nếu tôi muốn:

  • tạo C lớn ++ (11) dự án - cho phép nói một trình biên dịch phức tạp
  • sử dụng với LLVM
  • hãy chắc chắn nó sẽ được linh hoạt và đơn giản để sử dụng
  • đảm bảo rằng nó sẽ đủ nhanh
  • biên dịch theo tất cả nền tảng chuẩn (nền tảng Linux, nhưng tôi cũng muốn biên dịch trong Windows và MacOSX)

Đọc rất nhiều bài báo tôi đã tìm ra các công cụ "tốt nhất", nhưng tôi không có hết hạn với chúng và thật khó để tìm ra bất kỳ sự so sánh nào, không phải là rất thiên vị (như so sánh các tác giả scons) và không phải là rất cũ.really

Trả lời

12

waf bao gồm hầu hết các yêu cầu của bạn ...

  • thay đổi API: không phải là một vấn đề như waf được tính vào tarball nguồn (< 100Ko)

  • dự án lớn: bạn có thể chia cấu hình của bạn trong các thư mục con (các ngữ cảnh có thể được kế thừa). Tôi đã làm việc trên các dự án với hơn 10k tệp trong C/C++/fortran77/fortran90/python/Cython bao gồm tài liệu trong doxygen/sphinx.

  • linh hoạt và easyness: bạn có thể thêm các module en python (http://code.google.com/p/waf/wiki/AddingNewToolsToWaf)

  • nhanh: các nhiệm vụ có thể được chạy song song: http://www.retropaganda.info/~bohan/work/psycle/branches/bohan/wonderbuild/benchmarks/time.xml

  • plat-form đa: bạn có thể chạy WAF ở khắp mọi nơi python có sẵn, bao gồm Windows và MacO. Waf tương thích với các trình biên dịch mscvc, gcc, icc và các trình biên dịch khác. Bạn có thể tạo ra các dự án trực quan/nhật thực.

... nhưng waf dường như có một vấn đề với llvm: http://code.google.com/p/waf/issues/detail?id=1252

EDIT: như đã nói bởi Wojciech Danilo, vấn đề LLVM đã được cố định

+0

Không, nó không có vấn đề gì - tôi đã xoay sở để giải quyết nó và tôi vừa thêm giải pháp vào chủ đề :) –

+0

Tôi đã phát hiện ra rằng Waf linh hoạt hơn nhiều so với cmake và nó thực sự dễ sử dụng. Chúng tôi đã xây dựng trên đầu trang của nó hệ thống xây dựng tùy chỉnh của chúng tôi và nó hoạt động tuyệt vời! –

3

Tôi hiện đang sử dụng CMake để thực hiện ngôn ngữ của riêng mình thông qua C++ 11 và LLVM.

Tôi thích CMake vì cú pháp dễ sử dụng. LLVM có thể được nạp với một lệnh 'load_package' dễ dàng. Sau đó bạn có thể sử dụng tất cả các tiêu đề và thư viện bạn cần. CMake cho phép các kịch bản con kế thừa các biến từ các tập lệnh mẹ. Vì vậy, bạn không cần phải thiết lập các biến và tải các gói trong mỗi thư mục con.

Hỗ trợ C++ 11 tùy thuộc vào trình biên dịch bạn muốn sử dụng. Tất cả trong tất cả các CMake chỉ là một bố cục để tạo kịch bản xây dựng 'thực sự' của bạn.

Khi bạn đang sử dụng, bạn có thể sử dụng make --jobs = N để tăng tốc độ biên dịch trên nền tảng đa lõi. Trên Windows, bạn có thể tạo các tệp Visual Studio 2012-project và sử dụng hệ thống xây dựng của Microsoft và sử dụng các công việc xây dựng của họ để tăng tốc quá trình biên dịch. Bạn nên luôn tạo thư mục con cho các tệp xây dựng (myproject/build hoặc một cái gì đó). Bằng cách này bạn giữ cho cây nguồn của bạn sạch (cd build; cmake ..; cd ..).

Tôi không thể nói cho tất cả các công cụ khác ngoài kia.

+0

Khi chúng ta di cư cho 'cmake' ; thật là một điều rất khó học. Tài liệu - mặc dù cải thiện - có sự nhầm lẫn. Ngôn ngữ dựa trên macro làm cho việc đọc sách trở thành một cơn ác mộng (cho đến khi bạn huấn luyện đôi mắt của bạn) nhưng tất cả đều đáng để nó kết thúc. Tôi đã không sử dụng 'waf' nhưng nghĩ đến việc cho nó đi cho các dự án khác. Hấp dẫn của nó kể từ khi nó dựa trên python. – Dilawar