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ặc scoop.

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?

makefile vs justfile

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