Học tập makefiles quan trọng như thế nào? [đóng cửa]


12

Tôi làm việc trong c ++ chủ yếu như một sở thích (Tôi vẫn còn đi học và không có việc làm thực sự). Các IDE tạo ra tệp tạo tệp cho tôi và vì vậy tôi tự hỏi liệu có đáng để học cách tự tạo chúng không. Ý tôi là "đáng học hỏi", tôi có nên bỏ mọi thứ và học cách viết chúng trước khi tiếp tục học c ++ không? Là học chúng sẽ thực sự cần thiết? Nếu vậy, tôi nên tìm hiểu về chúng (cú pháp chung và hiểu cách chúng hoạt động, v.v.) hoặc thực sự học cách viết chúng?


1
hầu hết các dự án nguồn mở sử dụng rất nhiều tệp tạo tệp theo cách này hay cách khác. Vì vậy, vâng, bạn nên tìm hiểu làm thế nào makefiles hoạt động. Viết chúng bằng tay là một câu chuyện khác và nên tránh ưu tiên tạo chúng bằng một số công cụ ngoại trừ bạn có rất ít tệp hoặc có thể sử dụng quy tắc chung / ẩn và các kỹ thuật tương tự khác
permeakra

nếu bạn muốn người khác biên dịch nguồn của bạn trên Linux và hệ điều hành dựa trên Unix khác, bạn cần tìm hiểu chúng.

Bạn có thể tìm hiểu những điều cơ bản về makefiles, phụ thuộc và thay thế, v.v., trong thời gian ngắn hơn, bạn sẽ phải đọc tất cả các câu trả lời cho câu hỏi này :)
JohnB

Câu trả lời:


14

Vâng, nó chắc chắn đáng để hiểu cách Makefiles hoạt động. Nó có thể không liên quan đến bạn ngay bây giờ (vì bạn đang sử dụng IDE tạo ra chúng), nhưng rất có thể kiến ​​thức sẽ hữu ích trong tương lai.

Ý tôi là "đáng học hỏi", tôi có nên bỏ mọi thứ và học cách viết chúng trước khi tiếp tục học c ++ không?

Thành thật mà nói, đó là một khái niệm kỳ lạ về "đáng học hỏi" ...

Nhưng không, tôi không nghĩ bạn cần phải làm điều đó.

Là học chúng sẽ thực sự cần thiết?

Chúng tôi không thể dự đoán liệu bạn có thực sự cần kiến ​​thức này trong tương lai hay không. Nó phụ thuộc vào việc bạn có tiếp tục với lập trình C ++ hay không và bạn thực hiện nó trong bối cảnh nào.

Nếu vậy, tôi nên tìm hiểu về chúng (cú pháp chung và hiểu cách chúng hoạt động, v.v.) hoặc thực sự học cách viết chúng?

Tôi muốn giới thiệu cả hai. Nếu bạn không thể viết Makefile, điều gây tranh cãi là bạn biết chuyện gì đang xảy ra.

Có quan điểm khác nói rằng quá nhiều kiến ​​thức không hữu ích.

Nếu bạn hiểu sâu về điều này, bạn sẽ biết rằng có nhiều phiên bản Make khác nhau và việc viết một Makefile phức tạp hoạt động với nhiều phiên bản Make trên nhiều nền tảng là ... khó. Tuy nhiên, trong thế giới nguồn mở, "cách tốt nhất" là sử dụng các công cụ như automake, autoconfv.v để tạo các tệp tạo tệp , v.v. Nếu bạn làm điều đó, rất nhiều sự phức tạp liên quan đến phiên bản / nền tảng được xử lý đằng sau hậu trường .


Cuối cùng, bạn đã gắn thẻ câu hỏi bằng "java". Tôi nghĩ rằng bạn không nên sử dụng makeđể xây dựng các ứng dụng Java (trừ khi bạn cũng đang xây dựng các thư viện mã gốc). Có các công cụ xây dựng cụ thể của Java dễ sử dụng hơn nhiều ... và thực hiện công việc tốt hơn make.


8

Nếu bạn đang làm việc với các hệ điều hành nguồn mở hoặc giống Unix, thì có. Mặc dù vậy, chúng không phức tạp lắm. Học tập makesẽ giúp bạn tiết kiệm rất nhiều thời gian trong thời gian dài.


Học để đọc hay học viết?

Cả hai. Bạn muốn biết cách đọc nó để bạn có thể gỡ lỗi các vấn đề của phần mềm bạn sử dụng hoặc viết để bạn có thể tự tạo.
EhevuTov

Sau đó tôi phải không đồng ý với phần viết. Có rất nhiều cách khác - được cho là tốt hơn nhiều - để tự động hóa các bản dựng. Viết makefiles thực sự hữu ích là xa tầm thường và không cần thiết.

3

Makefiles rất quan trọng trên các hệ thống UNIX (ví dụ AIX, Linux, OS X). Tuy nhiên, tôi nghĩ rằng tầm quan trọng tuyệt đối của "bạn phải biết điều đó" đã giảm đi trong những năm gần đây. Ví dụ: bạn không thực sự tìm thấy chúng trong quá trình phát triển Windows (Visual Studio, v.v.) và XCode (trên OS X) sử dụng một hệ thống hoàn toàn khác. Tôi không biết nhiều về Java, nhưng ở đó tôi nghĩ họ sử dụng các tệp ant và không có gì.

Có một hệ thống rất hay gọi là CMake tạo các tệp xây dựng riêng cho hệ điều hành mà bạn đang chạy. Ví dụ: nếu bạn viết đặc tả dự án của mình trong CMake, thì bạn có thể tạo dự án xây dựng Visual Studio trên Windows, dự án XCode trên Mac và Makefile trên Linux. Theo một cách nào đó, CMake thay thế autoconf và automake.

Tôi thường tạo các tệp CMake cho "các dự án lớn" của mình nhưng tôi biết Make trong trường hợp tôi muốn viết nhanh "hãy hoàn thành nó" Makefile. Điều đó tốt cho kiến ​​thức văn hóa của bạn, bởi vì có rất nhiều thư viện phần mềm sử dụng Makefiles và chắc chắn bạn sẽ cần phải chỉnh sửa các trình biên dịch và vị trí thư viện cụ thể. Nhưng bạn sẽ thấy rằng các dự án lớn (như KDE) đang chuyển sang CMake và tương tự vì Make có một số hạn chế đằng sau cái đầu xấu xí của họ khi các dự án trở nên phức tạp.


Học CMake sẽ là những đơn đặt hàng có lợi hơn. Makefiles có thể được xem như một chi tiết triển khai - đừng bận tâm đến việc học chúng (cho đến khi thực sự bị ép buộc), giống như các tệp dự án Visual Studio.

2

Tôi thiên vị vì tôi nghĩ makefiles là một hệ thống khủng khiếp. Bạn nên học cú pháp chung để có thể sửa đổi tệp thực hiện hiện có. Nhưng tôi không nghĩ rằng học mọi thứ về nó cũng như làm cho mọi người từ đầu là hữu ích.


Quan tâm để giải thích tại sao makefiles là một hệ thống khủng khiếp? So với cái gì?
JonnyJD

@JonnyJD: Một điều là tôi không tin rằng một hệ thống xây dựng tốt nên bạn đặt một tệp tạo trong mỗi thư mục con. Nhưng nó tệ bởi vì nó không dễ sử dụng hơn nhiều sau đó viết một tập tin bat thực sự đang nói điều gì đó.

Âm thanh giống như bạn không thích tạo tập tin xây dựng bằng tay. Mà trong bản thân nó không phải là vấn đề lớn. Makefiles là một biến thể có thể đọc và viết thủ công. (đã được mô đun hóa, chỉ đơn giản là đã theo dõi quá trình theo dõi phụ thuộc so với bash / bat) Phần tự động là tự động. Điều duy nhất thực sự khác biệt nhiều là chỉ định các phụ thuộc trong GUI và lưu tất cả những điều này trong một tệp dự án. Hoặc hệ thống xây dựng là gì mà ít khủng khiếp hơn?
JonnyJD

2

Cũng như nhiều khía cạnh của đầu ra IDE, một tệp tạo tự động điển hình thường được cấu trúc không hiệu quả.

Với mức độ hiểu biết phù hợp, thường có thể cải thiện đáng kể hiệu suất (bản dựng nhanh hơn, v.v.). Tuy nhiên, trừ khi bạn thực sự biết chuyện gì đang xảy ra, nhiều khả năng bạn sẽ FUBAR, khi đấu tranh với tệp autogen-ed.

Tôi đặc biệt khuyên bạn có thể hiểu những gì đang diễn ra ... sau đó bạn có chọn bắt đầu chỉnh sửa một cái hiện có hay tạo riêng cho bạn hay không, là một vấn đề riêng biệt.


2

Có thể sử dụng thành công makehoặc một cái gì đó giống như nó cho phép bạn kiểm tra hộp "hiểu cách mô hình hóa các phụ thuộc giữa các phần của một chương trình bao gồm nhiều hơn một mô-đun".


1

Học cách viết Makefiles là một ý tưởng tốt cho một số lý do.

  1. Make là ngôn ngữ cho phép bạn mã hóa các phụ thuộc giữa các thành phần thông qua các quy tắc. Bạn sẽ có được nhiều kinh nghiệm với việc viết mã theo cách này và nó mở rộng các công cụ của bạn để suy nghĩ về việc giải quyết các vấn đề lập trình.
  2. Các nguyên tắc bạn học với Make có thể được sử dụng với Ant, Maven và Rake nếu bạn chọn học lập trình trong thế giới Java hoặc Ruby.
  3. Nhiều IDE có các tệp ma thuật mang thông tin cấu hình để giúp bạn xây dựng phần mềm của mình. Nếu bạn không tin tôi, hãy thử viết một kịch bản để xây dựng phần mềm của bạn mà không cần IDE. Khi bạn viết Makefiles của riêng bạn, bạn trở nên rất ý thức về sự phụ thuộc giữa mã, thư viện và các biến môi trường của bạn. Khi các hệ thống trở nên lớn hơn, điều này hóa ra là một công cụ hữu ích để gỡ lỗi hệ thống của bạn.

0

Bạn nên luôn luôn cố gắng để hiểu hệ thống xây dựng bạn đang sử dụng.

Điều đó không nhất thiết có nghĩa là bạn phải có thể tạo tất cả các tệp xây dựng bằng tay. Phần quan trọng là hiểu hệ thống xây dựng đang làm gì cho dự án của bạn và khả năng chung để biên dịch các dự án nhỏ theo cách thủ công (như trong "gõ lệnh trên thiết bị đầu cuối").

Tôi chỉ có xu hướng nghĩ rằng tạo Makefiles (đơn giản) là bước dễ nhất để hiểu những gì đang diễn ra, nhưng bạn có thể có những cách khác để hiểu cách xây dựng mọi thứ.

Tại sao / khi nào nên học Makefiles

Nếu bạn chỉ lập trình cho Windows và không mong đợi ai khác biên dịch mã của mình, vui lòng biên dịch mã theo cách bạn muốn.

Nếu bạn muốn lập trình bất khả tri của trình biên dịch (như trong "để người khác quyết định trình biên dịch hoặc IDE nào họ muốn sử dụng"), thì bạn nên tìm hiểu một hệ thống xây dựng khác thay vì chỉ để IDE của bạn "giải quyết".

Nếu bạn muốn lập trình cho các nền tảng khác nhau, thì bạn chắc chắn cần phải sử dụng một hệ thống xây dựng rộng rãi.

Điều đó vẫn không có nghĩa là bạn phải biết các Makefiles được tạo tự động hoạt động chi tiết như thế nào. Bạn chỉ cần biết làm thế nào các tập tin đầu vào cho hệ thống xây dựng hoạt động. Những điều này chỉ xảy ra để có một cú pháp tương tự đôi khi.


Cá nhân tôi thực sự thích Makefiles và sử dụng chúng cho nhiều thứ. Không chỉ biên dịch mã. Tôi tạo Makefile cho mọi pdf lớn hơn mà tôi tạo (với LaTeX) và mọi dự án tôi cần để tự động hóa một số tác vụ trong (xây dựng, đóng gói, tải lên, cập nhật phụ thuộc từ kho lưu trữ nguồn, sao lưu kéo / đẩy thủ công)

Tuy nhiên, tôi đang làm việc trên thiết bị đầu cuối rất nhiều và tôi đang làm việc với Linux. Tôi không sử dụng những gì bạn sẽ gọi một IDE khác ngoài vim (trình soạn thảo văn bản mạnh mẽ) và các công cụ điều khiển. Điều này có thể rất khác nhau đối với bạn.

Nếu bạn từng phàn nàn về việc phải chạy các lệnh lặp lại khác nhau chỉ để "cập nhật" / gói / tải lên / .. một "dự án", thì học cách viết Makefiles có thể là điều hữu ích cho bạn.

Nếu bạn có và sử dụng các công cụ / GUI / IDE cho mọi thứ, thì bạn có thể không nhận được gì từ kiến ​​thức đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.