DEV Community

Serhat Teker
Serhat Teker

Posted on • Originally published at tech.serhatteker.com on

Run Multiple Make Targets Concurrently

make is a widely used and powerful tool for running common tasks in a project.

I often look at the Makefile of a project in order to see how a project perform regular tasks such as running tests, compiling and starting db, etc.

Use Case 1

I want to run 2 local servers at the same time. I can run them on separate terminal windows but I don't want to do that. I'm a lazy developer and want to use one line solution.

For instance I want to run a python backend server and javascript front end server for live reload — if there is any change in static assets like js, css, scss etc..

# Makefile  django-server: ## Run the Django server python manage.py runserver 8000 npm-server: ## Run npm server to live reload npm run dev 
Enter fullscreen mode Exit fullscreen mode

You can run them concurrently like below:

$ make -j 2 npm-server django-server 
Enter fullscreen mode Exit fullscreen mode

Or you can use a target for it as well:

# Makefile  servers: make -j 2 npm-server django-server django-server: ## Run the Django server python manage.py runserver 8000 npm-server: ## Run npm server to live reload npm run dev 
Enter fullscreen mode Exit fullscreen mode

Then run make servers.

Use Case 2

I want to run a local server and open a browser related to it. I don't want to manually click my browser and type localhost:$PORT.

Solution:

# Makefile  local-dev: django-server browser django-server: ## Run the Django server python manage.py runserver 8000 browser: google-chrome --new-window http://localhost:8000 # or if you use firefox # firefox --new-window localhost:8000 
Enter fullscreen mode Exit fullscreen mode

Then type make local-dev.

All done.

Top comments (1)

Collapse
 
rdurkacz profile image
rdurkacz

I think you could achieve the same result just using the shell, as follows-
python manage.py runserver 8000 &
google-chrome --new-window localhost:8000 &

or more economically-
nohup python manage.py runserver 8000 &
nohup google-chrome --new-window localhost:8000 &

because you could then close the terminal