just compared to make is something that was asked during my PHP London talk, and whilst they are similar, just has differences for me that explains why I use it:
Tabs or spaces
A Makefile needs to use tabs. Justfiles are more flexible and work with tabs or any number of spaces.
.PHONY
With a Makefile, you need to declare some targets as "phony". I believe that this is for targets that don't generate artifact files with that name, so as I'm not compiling and building files with make, this is redundant and adds visual noise.
Passing arguments
This is how a composer target looks like in a Makefile:
composer:
docker compose exec php composer
With this, I'd expect to be able to pass arguments to it - e.g. make composer info drupal/core.
But, instead of seeing the expected output, I get an error: make: *** No rule to make target 'info'. Stop..
This is what I'd need to do to pass arguments to the composer target:
Now I can run make composer COMPOSER_ARGS="info drupal/core" and see what I was expecting but the syntax isn't what I'd want.
just, on the other hand, allows for defining parameters to its recipes:
composer *args:
docker compose exec php composer
Here, I can create as many named parameters as needed and use them in the recipe with the syntax that I wanted - just composer info drupal/core.
I can think of a few others but this is is the main reason why I moved from make and later adopted just.
just, for me, gives the flexibilty that I need whilst using a simple and familiar syntax but without some of the confusing and complicated behaviours of make.
- Oliver
Was this interesting?
About me
I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.