Comparing Makefile and Just: Which One Should You Choose?

By khoanc, at: 17:59 Ngày 14 tháng 12 năm 2024

Thời gian đọc ước tính: 6 min read

Comparing Makefiles and Just: Which One Should You Choose?
Comparing Makefiles and Just: Which One Should You Choose?

Comparing Makefile and Just: Which One Should You Choose?


When it comes to automating repetitive tasks in your projects, tools like Makefile and Just often come into play. While Makefile have been a standard for decades, Just offers a modern alternative with a more user-friendly approach.

Let’s break down the key differences between the two to help you decide which tool fits your needs best.

 

1. Syntax: Simplicity vs. Complexity


Makefile
 

  • Syntax is strict and requires specific rules, such as using tabs for indentation (not spaces).
     
  • Targets and commands often feel cryptic to newcomers.
     

Example Makefile Task:

build:
    @echo "Building the project..."
    gcc -o app main.

 

Note: Forgetting to use a tab can break your Makefile and lead to confusing errors.

 

Just
 

  • Uses a modern and straightforward syntax.
     
  • Indentation can be done with spaces, making it easier to read and write.
     

Example Just Task:

build:
    echo "Building the project..."
    gcc -o app main.c

 

2. Cross-Platform Compatibility


Makefile
 

  • Native to Unix-like systems (Linux/macOS).
     
  • Requires additional tools (e.g., GNU Make) to run on Windows, which can complicate setup.
     


Just
 

  • Cross-platform out of the box.
     
  • Works seamlessly on Linux, macOS, and Windows without extra dependencies.

 

3. Variables: Ease of Use


Makefile
 

  • Variables are defined with = and referenced using $(...).
     
  • Limited flexibility for handling default values or complex logic.


Makefile Variable Example:

NAME = app

build:
    @echo "Building $(NAME)..."
    gcc -o $(NAME) main.c


Just
 

  • Variables are defined with := and referenced using {{...}}.
     
  • Supports more advanced use cases, including default values and interpolation.
     

Just Variable Example:

name := "app"

build:
    echo "Building {{name}}..."
    gcc -o {{name}} main.c

 

4. Task Dependencies


Makefile
 

  • Allows you to define dependencies between tasks, ensuring they run in the correct order.

 

Makefile Dependency Example:

build: clean
    @echo "Building the project..."
    gcc -o app main.c

clean:
    @echo "Cleaning up..."
    rm -f app

 

Just
 

  • Dependencies are defined by simply listing the dependent tasks.
     
  • Just executes them in the correct order automatically.
     

Just Dependency Example:

build: clean
    echo "Building the project..."
    gcc -o app main.c

clean:
    echo "Cleaning up..."
    rm -f app

 

 

5. Arguments and Defaults


Makefile
 

  • Arguments must be passed as environment variables, making the syntax less intuitive.

 

Makefile Argument Example:

build:
    @echo "Building with mode: $(MODE)"

 

Run Command:

make build MODE=debug

 

Just
 

  • Supports built-in arguments with default values, making it simpler and more explicit.

 

Just Argument Example:

build mode="release":
    echo "Building with mode: {{mode}}"

 

Run Command:

just build mode=debug

 

6. Readability and Maintainability


Makefile
 

  • Difficult to maintain for larger projects due to strict syntax rules and lack of modularity.
     
  • Error messages can be cryptic, especially for syntax errors like missing tabs.
     

Just
 

  • Cleaner and easier to maintain, even for complex projects.
     
  • Provides helpful error messages with clear indications of what went wrong.

 

7. Tooling and Installation


Makefile
 

  • Comes pre-installed on most Unix-like systems (Linux/macOS).
     
  • Requires additional setup for Windows.
     

Just

  • Needs to be installed, but the process is straightforward with package managers like cargo, brew, or scoop.

 

Installation Example:

# Install using Homebrew on macOS
brew install just

# Install using Cargo on Linux/macOS
cargo install just

 

Which One Should You Use?

 

makefile vs justfile

 

Conclusion

Makefile may still be a good fit if you are using Unix systems. For modern development workflows, Just provides a simpler, more intuitive alternative with better cross-platform support and enhanced features.

Switching to Just is particularly beneficial for teams or projects where ease of use, readability, and maintainability are priorities - Big companies cannot do that easily, but we (startups) can adapt quickly. 

Would you like assistance converting your Makefile to a justfile or diving deeper into Just's features? Let us know!

Be aware of Just issues - https://github.com/casey/just/issues


Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.