Tôi viết mã trên C/C++ và sử dụng Makefile (GNU) để biên dịch mã. Tôi có thể làm tương tự với cmake và lấy một MakeFile. Tuy nhiên, tôi không hiểu sự khác nhau giữa việc sử dụng Makefile và cmake để biên dịch mã.Sự khác biệt giữa việc sử dụng Makefile và cmake để biên dịch mã số
Trả lời
Tạo (hoặc đúng hơn là Makefile) là một hệ thống xây dựng - nó điều khiển trình biên dịch và các công cụ xây dựng khác để xây dựng mã của bạn.
CMake là trình tạo hệ thống xây dựng. Nó có thể tạo ra Makefiles, nó có thể tạo ra các tệp xây dựng Ninja, nó có thể tạo ra các dự án KDEvelop hoặc XCode, nó có thể tạo ra các giải pháp Visual Studio. Từ cùng một điểm bắt đầu, cùng một tệp CMakeLists.txt. Vì vậy, nếu bạn có một dự án độc lập nền tảng, CMake là một cách để làm cho nó xây dựng hệ thống độc lập là tốt.
Nếu bạn có các nhà phát triển Windows được sử dụng cho Visual Studio và nhà phát triển Unix, những người thề bởi GNU Make, CMake là (một trong) cách đi.
Tôi luôn khuyên bạn nên sử dụng CMake (hoặc một trình tạo hệ thống khác, nhưng CMake là sở thích cá nhân của tôi) nếu bạn dự định dự án của bạn có nhiều nền tảng hoặc có thể sử dụng rộng rãi. Bản thân CMake cũng cung cấp một số tính năng đẹp như phát hiện phụ thuộc, quản lý giao diện thư viện hoặc tích hợp với CTest, CDash và CPack.
Sử dụng trình tạo bộ tạo hệ thống để giúp dự án của bạn có khả năng tương lai hơn. Ngay cả khi bạn là GNU-Make-only, nếu sau này bạn quyết định mở rộng sang các nền tảng khác (có thể là Windows hay cái gì đó được nhúng), hoặc chỉ muốn sử dụng một IDE?
cảm ơn bạn! Chỉ cần để xác nhận, rằng nếu tôi chỉ lập trình trên môi trường Linux hơn là chỉ makefile là đủ nhưng nếu tôi muốn chương trình từ Linux chạy trong Mac hơn cmake là lựa chọn tốt hơn khi tôi hiểu điều đó, chúng ta không cần tạo một makefile mới Mac mà chỉ cần chạy cmake. Đó có phải là toàn bộ vấn đề? – rish
@ rish Vâng, đó là ý chính. Tuy nhiên, lưu ý rằng có nhiều cách để lập trình trên Linux hơn Makefiles - xem ví dụ: QtCreator, KDEvelop, Ninja. Đối với mỗi trong số này, đó là hoặc là "tạo một dự án và giữ nó đồng bộ với Makefile" hoặc "CMake chạy lại". Và, như câu trả lời đề cập, CMake cũng có chức năng khác, như khám phá sự phụ thuộc (ví dụ ['find_package()'] (http://www.cmake.org/cmake/help/v3.0/command/find_package.html)) hoặc hỗ trợ kiểm tra/đóng gói. – Angew
Tôi đọc rằng CMake không thể tạo các tệp makefiles không đệ quy. Điều đó vẫn đúng? –
- 1. Sự khác biệt chính giữa Trình biên dịch và Transpiler
- 2. Sự khác biệt giữa việc sử dụng StringTokenizer và String.split()?
- 3. Sự khác biệt giữa việc sử dụng @OneToMany và @ManyToMany
- 4. Sự khác biệt giữa việc sử dụng UINavigationController và UINavigationBar
- 5. Sự khác biệt giữa việc sử dụng Trace và TraceSource
- 6. Sự khác biệt trong loại giữa việc sử dụng và không sử dụng Đặt từ khóa
- 7. Sự khác biệt giữa việc cài đặt gói từ nguồn và từ mã nhị phân đã biên dịch
- 8. Sự khác biệt giữa thư viện và mã ứng dụng?
- 9. Sự khác biệt giữa việc sử dụng tên và nhập đủ điều kiện trong Java
- 10. Biên dịch ngày giờ sử dụng cmake
- 11. Sự khác biệt giữa việc sử dụng Modulename; và sử dụng Modulename();
- 12. Sự khác biệt giữa Trình biên dịch Chỉ trong thời gian và Phiên dịch là gì?
- 13. Sự khác biệt chính xác giữa Trình biên dịch và Phiên dịch?
- 14. Sự khác biệt giữa các tiêu đề được biên dịch trước và các tệp nhị phân được biên dịch trước
- 15. Sự khác biệt giữa ASP.NET WebHooks và dịch vụ web?
- 16. Sự khác biệt giữa việc sử dụng "def" để cập nhật var và "alter-var-root"
- 17. Indexeddb: Sự khác biệt giữa việc sử dụng và không đầy đủ?
- 18. Sự khác biệt cho ncurses giữa giải thích và biên dịch Haskell?
- 19. Tại sao nhận được sự khác biệt giữa việc sử dụng XCode và xcodebuild?
- 20. Sự khác biệt giữa việc chờ thông báo và CountDownLatch
- 21. Sự khác biệt giữa Chuỗi và StaticString
- 22. Sự khác biệt giữa $ * và $ @
- 23. Sự khác biệt giữa readAsBinaryString và readAsText sử dụng FileReader
- 24. Sự khác biệt giữa Thành phần OSGi và Dịch vụ
- 25. Sự khác nhau giữa việc sử dụng javac và javax.tools.JavaCompiler là gì?
- 26. Sự khác biệt giữa mã hóa UTF?
- 27. Sự khác biệt giữa Lớp lưu trữ và Dịch vụ
- 28. Sự khác biệt giữa dịch vụ web OData và REST
- 29. Sự khác nhau giữa -pthread và -lpthread khi biên dịch
- 30. Sự khác biệt giữa lỗi mã trả về và lỗi
cmake cũng có thể tạo tệp để sử dụng ninja –