Sự khác biệt giữa Autotools, Cmake và Scons là gì?
Sự khác biệt giữa Autotools, Cmake và Scons là gì?
Câu trả lời:
Trên thực tế, Autotools 'chỉ có' ân huệ tiết kiệm 'thực sự là đó là những gì tất cả các dự án GNU đang sử dụng.
Các vấn đề với Autotools:
Nó hoạt động ... hầu hết thời gian ... là tất cả những gì bạn có thể nói về Autotools. Đây là một hệ thống giải quyết một số vấn đề chỉ thực sự liên quan đến dự án GNU ... cho mã công cụ cơ bản, cốt lõi của họ. (Chỉnh sửa (24/05/2014): Cần lưu ý rằng loại mối quan tâm này là một điều BAD tiềm ẩn đáng lo ngại- Heartbleed một phần xuất phát từ suy nghĩ này và với các hệ thống hiện đại, chính xác, bạn thực sựkhông có bất kỳ hoạt động kinh doanh nào liên quan đến phần lớn những gì Autotools sửa chữa. GNU có thể cần phải thực hiện loại bỏ codebase, xem xét những gì đã xảy ra với Heartbleed) Bạn có thể sử dụng nó để thực hiện dự án của mình và nó có thể hoạt động tốt cho một dự án nhỏ mà bạn không muốn làm việc ở bất cứ đâu trừ Linux hoặc ở đâu GNU toolchain rõ ràng đang hoạt động chính xác. Tuyên bố rằng nó "tích hợp độc đáo với Linux" là một tuyên bố táo bạo và khá không chính xác . Nó tích hợp với bộ công cụ GNU một cách hợp lý và giải quyết các vấn đề mà CNTT gặp phải với các mục tiêu của nó.
Điều này không có nghĩa là không có vấn đề với các tùy chọn khác được thảo luận trong chuỗi ở đây.
SCons là một thay thế cho Make / GMake / vv. và trông khá đẹp, tất cả những thứ được xem xét Tuy nhiên ...
Các ví dụ đưa ra cho CMake trong chủ đề này là một chút không có thật.
Tuy nhiên...
Trong thực tế, mục tiêu của bạn nên quyết định những gì bạn chọn ở đây.
Có một lý do rất nhiều, nhiều dự án đang bỏ qua qmake, Autotools, v.v. và chuyển sang CMake. Cho đến nay, tôi có thể hoàn toàn mong đợi một dự án dựa trên CMake sẽ rơi vào tình huống biên dịch chéo hoặc vào một thiết lập VisualStudio hoặc chỉ cần một số lượng nhỏ để dọn dẹp vì dự án không dành cho các bộ phận chỉ dành cho Windows hoặc OSX đến cơ sở mã. Tôi thực sự không thể mong đợi rằng trong một dự án dựa trên SCons - và tôi hoàn toàn mong đợi các dự án Autotools 1/3 trở lên sẽ nhận được SOMETHING sai khi loại trừ nó xây dựng ngay trên bất kỳ bối cảnh nào ngoại trừ một máy chủ xây dựng một hoặc một Scratchbox2.
Một phân biệt quan trọng phải được thực hiện giữa những người sử dụng các công cụ. Cmake là một công cụ phải được người dùng sử dụng khi xây dựng phần mềm. Các autotools được sử dụng để tạo tarball phân phối có thể được sử dụng để xây dựng phần mềm chỉ bằng các công cụ tiêu chuẩn có sẵn trên bất kỳ hệ thống tuân thủ SuS nào. Nói cách khác, nếu bạn đang cài đặt phần mềm từ tarball được xây dựng bằng autotools, thì bạn không sử dụng autotools . Mặt khác, nếu bạn đang cài đặt phần mềm sử dụng Cmake, thì bạn đang sử dụng Cmake và phải cài đặt phần mềm để xây dựng phần mềm.
Phần lớn người dùng không cần cài đặt autotools trên hộp của họ. Trong lịch sử, nhiều sự nhầm lẫn đã được gây ra bởi vì nhiều nhà phát triển phân phối tarball không đúng định dạng buộc người dùng phải chạy autoconf để tạo lại tập lệnh cấu hình và đây là lỗi đóng gói. Nhiều sự nhầm lẫn đã được gây ra bởi thực tế là hầu hết các bản phân phối linux chính đều cài đặt nhiều phiên bản của autotools, khi chúng không nên cài đặt bất kỳ phiên bản nào trong số chúng theo mặc định. Thậm chí nhiều sự nhầm lẫn còn xảy ra do các nhà phát triển cố gắng sử dụng hệ thống kiểm soát phiên bản (ví dụ: cvs, git, svn) để phân phối phần mềm của họ thay vì xây dựng tarball.
asciidoc
hoặc help2man
hoặc doxygen
hoặc, quan trọng, sự kết hợp Autotool đúng. Đây là một vấn đề tiếp thị lớn đối với các autotools. Người dùng nghĩ sai rằng họ cần cài đặt autoconf vì họ không hiểu sự khác biệt giữa tarball và VCS.
Đây không phải là về các tiêu chuẩn mã hóa GNU.
Những lợi ích hiện tại của autotools - cụ thể là khi được sử dụng với automake - là chúng tích hợp rất tốt với việc xây dựng phân phối Linux.
Ví dụ với cmake, nó luôn luôn "là -DCMAKE_CFLAGS hoặc -DCMAKE_C_FLAGS mà tôi cần?" Không, không phải, đó là "-DCMAKE_C_FLAGS_RELEASE". Hoặc -DCMAKE_C_FLAGS_DEBUG. Thật khó hiểu - trong autoconf, nó chỉ là ./mình CFLAGS = "- O0 -ggdb3" và bạn có nó.
Khi tích hợp với cơ sở hạ tầng xây dựng, scons có vấn đề mà bạn không thể sử dụng make %{?_smp_mflags}
, _smp_mflags
trong trường hợp này là macro RPM mở rộng gần như (quản trị viên có thể đặt nó) sức mạnh hệ thống. Mọi người đặt những thứ như -jNCPUS ở đây thông qua môi trường của họ. Với các scons không hoạt động, vì vậy các gói sử dụng scons chỉ có thể được tạo nối tiếp trong các bản phát hành.
./configure CFLAGS=-O0
thường thất bại với các gói ghi đè CFLAGS trong tệp thực hiện và thay vào đó yêu cầu người dùng chạy ./configure --enable-debug
. (ví dụ tmux
).
Điều quan trọng cần biết về Autotools là chúng không phải là một hệ thống xây dựng chung - chúng thực hiện các tiêu chuẩn mã hóa GNU và không có gì khác. Nếu bạn muốn tạo một gói tuân theo tất cả các tiêu chuẩn GNU, thì Autotools là một công cụ tuyệt vời cho công việc. Nếu bạn không, thì bạn nên sử dụng Scons hoặc CMake. (Ví dụ, xem câu hỏi này .) Sự hiểu lầm phổ biến này là nơi mà hầu hết sự thất vọng với Autotools đến từ.
AUTOMAKE_OPTIONS = -foreign
trong của bạn Makefile.am
. (Hoặc -foreign
trong của bạn autogen.sh
. Tôi nghĩ rằng hầu hết mọi người đều sử dụng điều này.)
installcheck
và distclean
. Nếu bạn cố gắng thay đổi loại hành vi đó trong khi vẫn sử dụng Autotools, thì bạn chỉ đang lãng phí thời gian của mình.
Mặc dù theo quan điểm của các nhà phát triển, cmake hiện dễ sử dụng nhất, từ góc độ người dùng tự động có một lợi thế lớn
autotools tạo một tập lệnh cấu hình tập tin duy nhất và tất cả các tập tin để tạo nó được phân phối cùng với bản phân phối. thật dễ hiểu và khắc phục với sự trợ giúp của grep / sed / awk / vi. So sánh điều này với Cmake nơi có rất nhiều tệp được tìm thấy trong / usr / share / cmak * / Mô-đun mà người dùng không thể sửa được trừ khi anh ta có quyền truy cập quản trị viên.
Vì vậy, nếu một cái gì đó không hoàn toàn hoạt động, nó thường có thể dễ dàng được "sửa" bằng cách sử dụng các công cụ Unix tiêu chuẩn (grep / sed / awk / vi, v.v.) theo cách búa tạ mà không cần phải hiểu hệ thống xây dựng.
Bạn đã bao giờ đào qua thư mục xây dựng cmake của bạn để tìm hiểu những gì sai? So với shellscript đơn giản có thể đọc từ trên xuống dưới, theo các tệp Cmake được tạo để tìm hiểu những gì đang diễn ra là khá khó khăn. Ngoài ra, với CMake, việc điều chỉnh các tệp FindFoo.cmake không chỉ đòi hỏi kiến thức về ngôn ngữ CMake mà còn có thể yêu cầu các đặc quyền siêu người dùng.