So sánh Makefile và Just: Nên chọn cái nào?
By khoanc, at: 17:59 Ngày 14 tháng 12 năm 2024
Thời gian đọc ước tính: __READING_TIME__ minutes


Khi nói đến việc tự động hóa các tác vụ lặp đi lặp lại trong các dự án của bạn, các công cụ như Makefile và Just thường được sử dụng. Trong khi Makefile đã là một tiêu chuẩn trong nhiều thập kỷ, Just cung cấp một giải pháp thay thế hiện đại với cách tiếp cận thân thiện với người dùng hơn.
Hãy cùng phân tích những điểm khác biệt chính giữa hai công cụ này để giúp bạn quyết định công cụ nào phù hợp nhất với nhu cầu của mình.
1. Cú pháp: Đơn giản so với Phức tạp
Makefile
- Cú pháp nghiêm ngặt và yêu cầu các quy tắc cụ thể, chẳng hạn như sử dụng tab để thụt lề (không phải khoảng trắng).
- Các mục tiêu và lệnh thường khó hiểu đối với người mới bắt đầu.
Ví dụ về tác vụ Makefile:
build:
@echo "Building the project..."
gcc -o app main.
Lưu ý: Quên sử dụng tab có thể làm hỏng Makefile của bạn và dẫn đến các lỗi khó hiểu.
Just
- Sử dụng cú pháp hiện đại và đơn giản.
- Thụt lề có thể được thực hiện bằng khoảng trắng, giúp dễ đọc và viết hơn.
Ví dụ về tác vụ Just:
build:
echo "Building the project..."
gcc -o app main.c
2. Khả năng tương thích đa nền tảng
Makefile
- Thuộc về hệ thống Unix-like (Linux/macOS).
- Yêu cầu các công cụ bổ sung (ví dụ: GNU Make) để chạy trên Windows, điều này có thể làm phức tạp việc thiết lập.
Just
- Đa nền tảng ngay lập tức.
- Hoạt động liền mạch trên Linux, macOS và Windows mà không cần phụ thuộc bổ sung.
3. Biến: Sự dễ sử dụng
Makefile
- Các biến được định nghĩa bằng
=
và được tham chiếu bằng$(...)
.
- Khả năng linh hoạt hạn chế để xử lý các giá trị mặc định hoặc logic phức tạp.
Ví dụ về biến Makefile:
NAME = app
build:
@echo "Building $(NAME)..."
gcc -o $(NAME) main.c
Just
- Các biến được định nghĩa bằng
:=
và được tham chiếu bằng{{...}}
.
- Hỗ trợ các trường hợp sử dụng nâng cao hơn, bao gồm cả các giá trị mặc định và nội suy.
Ví dụ về biến Just:
name := "app"
build:
echo "Building {{name}}..."
gcc -o {{name}} main.c
4. Phụ thuộc nhiệm vụ
Makefile
- Cho phép bạn định nghĩa các phụ thuộc giữa các tác vụ, đảm bảo chúng chạy theo đúng thứ tự.
Ví dụ về phụ thuộc Makefile:
build: clean
@echo "Building the project..."
gcc -o app main.c
clean:
@echo "Cleaning up..."
rm -f app
Just
- Các phụ thuộc được định nghĩa bằng cách chỉ cần liệt kê các tác vụ phụ thuộc.
- Just tự động thực hiện chúng theo đúng thứ tự.
Ví dụ về phụ thuộc Just:
build: clean
echo "Building the project..."
gcc -o app main.c
clean:
echo "Cleaning up..."
rm -f app
5. Đối số và giá trị mặc định
Makefile
- Các đối số phải được truyền dưới dạng biến môi trường, làm cho cú pháp ít trực quan hơn.
Ví dụ về đối số Makefile:
build:
@echo "Building with mode: $(MODE)"
Lệnh chạy:
make build MODE=debug
Just
- Hỗ trợ các đối số tích hợp với các giá trị mặc định, làm cho nó đơn giản hơn và rõ ràng hơn.
Ví dụ về đối số Just:
build mode="release":
echo "Building with mode: {{mode}}"
Lệnh chạy:
just build mode=debug
6. Khả năng đọc và bảo trì
Makefile
- Khó bảo trì đối với các dự án lớn hơn do các quy tắc cú pháp nghiêm ngặt và thiếu tính mô đun.
- Thông báo lỗi có thể khó hiểu, đặc biệt là đối với các lỗi cú pháp như thiếu tab.
Just
- Sạch hơn và dễ bảo trì hơn, ngay cả đối với các dự án phức tạp.
- Cung cấp các thông báo lỗi hữu ích với các chỉ dẫn rõ ràng về những gì đã xảy ra sai sót.
7. Công cụ và cài đặt
Makefile
- Đã được cài đặt sẵn trên hầu hết các hệ thống Unix-like (Linux/macOS).
- Yêu cầu thiết lập bổ sung cho Windows.
Just
- Cần được cài đặt, nhưng quy trình rất đơn giản với các trình quản lý gói như
cargo
,brew
hoặcscoop
.
Ví dụ về cài đặt:
# Cài đặt bằng Homebrew trên macOS
brew install just
# Cài đặt bằng Cargo trên Linux/macOS
cargo install just
Bạn nên sử dụng cái nào?
Kết luận
Makefile vẫn có thể phù hợp nếu bạn đang sử dụng hệ thống Unix. Đối với quy trình phát triển hiện đại, Just cung cấp một giải pháp thay thế đơn giản hơn, trực quan hơn với khả năng hỗ trợ đa nền tảng tốt hơn và các tính năng nâng cao hơn.
Việc chuyển sang Just đặc biệt có lợi cho các nhóm hoặc dự án nơi tính dễ sử dụng, khả năng đọc và bảo trì là ưu tiên hàng đầu - Các công ty lớn không thể làm điều đó dễ dàng, nhưng chúng ta (các công ty khởi nghiệp) có thể thích nghi nhanh chóng.
Bạn có muốn được hỗ trợ chuyển đổi Makefile của mình thành justfile
hoặc tìm hiểu sâu hơn về các tính năng của Just? Hãy cho chúng tôi biết!
Hãy lưu ý về các vấn đề của Just - https://github.com/casey/just/issues