SlideShare a Scribd company logo
1 of 29
SARAO Tech Talk Tuesday 16th, February 2021
PRESENTER: Mpho Mphego
Why you should consider adding a
‘Makefile’ into your *Python project
Objectives
● A short intro on Makefiles.
● Who needs Makefiles, I use Shell
scripts!
● How Makefiles are structured.
● Why bother using Makefile?
● Demo
● Some resources to checkout.
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
● First introduces 44 years ago, and till this day you can still find it in
most programming projects. It’s widely used in Unix and Unix-like OS
for automation.
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
● First introduces 44 years ago, and till this day you can still find it in
most programming projects. It’s widely used in Unix and Unix-like OS
for automation.
● Generally used to build executable programs and libraries from source
code.
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
● First introduces 44 years ago, and till this day you can still find it in
most programming projects. It’s widely used in Unix and Unix-like OS
for automation.
● Generally used to build executable programs and libraries from source
code.
● Besides building programs, it can also manage any project where some
files must be updated automatically whenever other files change.
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
● First introduces 44 years ago, and till this day you can still find it in
most programming projects. It’s widely used in Unix and Unix-like OS
for automation.
● Generally used to build executable programs and libraries from source
code.
● Besides building programs, it can also manage any project where some
files must be updated automatically whenever other files change.
● FYI: make is not limited to compiling C/C++ and programs
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
A short intro on Makefiles.
● According to wikipedia, A Makefile is a file which contains a set of
directives used by a make build automation tool to generate target(s).
● First introduces 44 years ago, and till this day you can still find it in
most programming projects. It’s widely used in Unix and Unix-like OS
for automation.
● Generally used to build executable programs and libraries from source
code.
● Besides building programs, it can also manage any project where some
files must be updated automatically whenever other files change.
● FYI: make is not limited to compiling C/C++ and programs
Sources:
● https://en.wikipedia.org/wiki/Makefile
● https://en.wikipedia.org/wiki/Make_(software)
● https://xkcd.com/149/
DISCLAIMER: I AM NOT A “GNU MAKE” EXPERT!
Who needs Makefiles, I use Shell
scripts!
● Functionality that the “Make” offers is far superior to a
regular Bash script.
Who needs Makefiles, I use Shell
scripts!
● Functionality that the “Make” offers is far superior to a
regular Bash script.
● Scripts are usually a sequence of instructions (procedural
paradigm). However, Makefile’s lets us specify
prerequisites and implications (declarative paradigm).
Who needs Makefiles, I use Shell
scripts!
● Functionality that the “Make” offers is far superior to a
regular Bash script.
● Scripts are usually a sequence of instructions (procedural
paradigm). However, Makefile’s lets us specify
prerequisites and implications (declarative paradigm).
● With a Makefile you could simply specify “rules” for
compilation, to deal with useful procedures for code
maintenances for example or decide when and if we need to
rebuild a file/executable.
Who needs Makefiles, I use Shell
scripts!
● Functionality that the “Make” offers is far superior to a
regular Bash script.
● Scripts are usually a sequence of instructions (procedural
paradigm). However, Makefile’s lets us specify
prerequisites and implications (declarative paradigm).
● With a Makefile you could simply specify “rules” for
compilation, to deal with useful procedures for code
maintenances for example or decide when and if we need to
rebuild a file/executable.
● Minimal rebuilds are possible in “Makefile” whereas the bash
script requires a lot of time and effort to achieve the same.
Who needs Makefiles, I use Shell
scripts!
● Functionality that the “Make” offers is far superior to a
regular Bash script.
● Scripts are usually a sequence of instructions (procedural
paradigm). However, Makefile’s lets us specify
prerequisites and implications (declarative paradigm).
● With a Makefile you could simply specify “rules” for
compilation, to deal with useful procedures for code
maintenances for example or decide when and if we need to
rebuild a file/executable.
● Minimal rebuilds are possible in “Makefile” whereas the bash
script requires a lot of time and effort to achieve the same.
● It’s a very old tool with somewhat old syntax, but still works
well
How Makefiles are structured.
● A makefile consists of “rules” in the following structure:
target: dependencies
<tab> system commands(s)
How Makefiles are structured.
Example
$ make venv
Target
$ cat Makefile
venv: ...
...
● target is a name of an action to carry out (eg: venv)
How Makefiles are structured.
Example
$ make venv
Target, prerequisite
$ cat Makefile
venv: clean
...
● target is a name of an action to carry out (eg: venv)
● dependency/prerequisite an action that needs to be run
before the current target can be run.
Example
$ make venv
Target, prerequisite and recipe
$ cat Makefile
venv: clean
@python -m virtualenv -p 3 .venv
● target is a name of an action to carry out (eg: venv)
● dependency/prerequisite an action that needs to be run
before the current target can be run.
● system command(s)/recipe an action that make carried out,
can be more than one command and indentation must consist
of a single <tab> character
How Makefiles are structured.
SHELL = /bin/sh
OBJS = main.o factorial.o hello.o
CFLAG = -Wall -g
CC = gcc
INCLUDE =
LIBS = -lm
hello:${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
clean:
-rm -f *.o core *.core
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
This is a typical example of the Makefile for compiling a C/C++ hello program. This program
consists of three files main.cpp, factorial.cpp and hello.cpp.
How Makefiles are structured.
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
○ One can easily make mistakes (eg. ports or volume mapping)
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
○ One can easily make mistakes (eg. ports or volume mapping)
○ It’s time consuming to have to type or copy from file each time.
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
○ One can easily make mistakes (eg. ports or volume mapping)
○ It’s time consuming to have to type or copy from file each time.
○ Affects your efficiency, the list goes on…
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
○ One can easily make mistakes (eg. ports or volume mapping)
○ It’s time consuming to have to type or copy from file each time.
○ Affects your efficiency, the list goes on…
● What if this process could be simplified by just running a command like:
Why bother using Makefile?
● If like me, you are probably tired of having to manually enter these type of commands (or have
them saved somewhere in some file), everytime you need to run a script in a container:
$ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 
--env DISPLAY=${DISPLAY} 
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 
--device /dev/snd 
--device /dev/video0 
name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} 
--arg_2 ${ARG_2} --arg_3 ${ARG_3}"
● Problems with this approach:
○ One can easily make mistakes (eg. ports or volume mapping)
○ It’s time consuming to have to type or copy from file each time.
○ Affects your efficiency, the list goes on…
● What if this process could be simplified by just running a command like:
$ make run_in_container
Why bother using Makefile?
The code!
● GNU Make (ebook pdf)
● Introduction to Make and Makefile(blog)
● Generic Makefile for your projects(GitHub)
● Automation and Make (Tutorial)
● Youtube (search query)
● Why You Should Add Makefile Into Your Python Project (blog)
● How To Use Makefiles to Automate Repetitive Tasks on an Ubuntu
VPS(Tutorial)
● Using Tox with a Makefile to Automate Python related tasks(blog)
Some resources to checkout.
Mpho Mphego
Software Engineer
Email: mmphego@ska.ac.za
Contact information
SKA South Africa, a Business Unit of the National Research Foundation.
We are building the Square Kilometre Array radio telescope (SKA), located in South Africa and eight other African
countries, with part in Australia. The SKA will be the largest radio telescope ever built and will produce science that
changes our understanding of the universe

More Related Content

What's hot

Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChang W. Doh
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHPhozn
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshopNick Belhomme
 
Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for Youhozn
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with PhingMichiel Rook
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With PhingDaniel Cousineau
 
Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Michiel Rook
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composernuppla
 
Golang execution modes
Golang execution modesGolang execution modes
Golang execution modesTing-Li Chou
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composernuppla
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesPantheon
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioCristopher Ewing
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with PhingMichiel Rook
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
Drupal + composer = new love !?
Drupal + composer = new love !?Drupal + composer = new love !?
Drupal + composer = new love !?nuppla
 

What's hot (20)

Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHP
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshop
 
Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for You
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with Phing
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With Phing
 
Ant vs Phing
Ant vs PhingAnt vs Phing
Ant vs Phing
 
Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
The problem with Perl
The problem with PerlThe problem with Perl
The problem with Perl
 
Golang execution modes
Golang execution modesGolang execution modes
Golang execution modes
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
Phing
PhingPhing
Phing
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with Phing
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Drupal + composer = new love !?
Drupal + composer = new love !?Drupal + composer = new love !?
Drupal + composer = new love !?
 

Similar to Makefile for python projects

Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
 
Build Systems with autoconf, automake and libtool [updated]
Build Systems with autoconf, automake and libtool [updated]Build Systems with autoconf, automake and libtool [updated]
Build Systems with autoconf, automake and libtool [updated]Benny Siegert
 
Makefile
MakefileMakefile
MakefileIonela
 
LOSS_C11- Programming Linux 20221006.pdf
LOSS_C11- Programming Linux 20221006.pdfLOSS_C11- Programming Linux 20221006.pdf
LOSS_C11- Programming Linux 20221006.pdfThninh2
 
Programming in Linux Environment
Programming in Linux EnvironmentProgramming in Linux Environment
Programming in Linux EnvironmentDongho Kang
 
Don't Fear the Autotools
Don't Fear the AutotoolsDon't Fear the Autotools
Don't Fear the AutotoolsScott Garman
 
Autotools pratical training
Autotools pratical trainingAutotools pratical training
Autotools pratical trainingThierry Gayet
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Ahmed El-Arabawy
 
Php Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant KillerPhp Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant KillerJackson F. de A. Mafra
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019corehard_by
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Eugene Yokota
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_netNico Ludwig
 
Cross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn UstepCross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn Ustepwangii
 
Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Eelco Visser
 
Compiler design notes phases of compiler
Compiler design notes phases of compilerCompiler design notes phases of compiler
Compiler design notes phases of compilerovidlivi91
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practicesDaniel Pfeifer
 
Embedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals masterEmbedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals masterHossam Hassan
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?AFUP_Limoges
 

Similar to Makefile for python projects (20)

Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
Build Systems with autoconf, automake and libtool [updated]
Build Systems with autoconf, automake and libtool [updated]Build Systems with autoconf, automake and libtool [updated]
Build Systems with autoconf, automake and libtool [updated]
 
Makefile
MakefileMakefile
Makefile
 
LOSS_C11- Programming Linux 20221006.pdf
LOSS_C11- Programming Linux 20221006.pdfLOSS_C11- Programming Linux 20221006.pdf
LOSS_C11- Programming Linux 20221006.pdf
 
Programming in Linux Environment
Programming in Linux EnvironmentProgramming in Linux Environment
Programming in Linux Environment
 
Don't Fear the Autotools
Don't Fear the AutotoolsDon't Fear the Autotools
Don't Fear the Autotools
 
Autotools pratical training
Autotools pratical trainingAutotools pratical training
Autotools pratical training
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
 
Php Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant KillerPhp Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant Killer
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
 
Cross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn UstepCross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn Ustep
 
Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?
 
Autotools
AutotoolsAutotools
Autotools
 
Compiler design notes phases of compiler
Compiler design notes phases of compilerCompiler design notes phases of compiler
Compiler design notes phases of compiler
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practices
 
Embedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals masterEmbedded c c++ programming fundamentals master
Embedded c c++ programming fundamentals master
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?
 

Recently uploaded

Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 

Recently uploaded (20)

Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 

Makefile for python projects

  • 1. SARAO Tech Talk Tuesday 16th, February 2021 PRESENTER: Mpho Mphego Why you should consider adding a ‘Makefile’ into your *Python project
  • 2. Objectives ● A short intro on Makefiles. ● Who needs Makefiles, I use Shell scripts! ● How Makefiles are structured. ● Why bother using Makefile? ● Demo ● Some resources to checkout.
  • 3. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/
  • 4. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). ● First introduces 44 years ago, and till this day you can still find it in most programming projects. It’s widely used in Unix and Unix-like OS for automation. Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/
  • 5. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). ● First introduces 44 years ago, and till this day you can still find it in most programming projects. It’s widely used in Unix and Unix-like OS for automation. ● Generally used to build executable programs and libraries from source code. Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/
  • 6. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). ● First introduces 44 years ago, and till this day you can still find it in most programming projects. It’s widely used in Unix and Unix-like OS for automation. ● Generally used to build executable programs and libraries from source code. ● Besides building programs, it can also manage any project where some files must be updated automatically whenever other files change. Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/
  • 7. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). ● First introduces 44 years ago, and till this day you can still find it in most programming projects. It’s widely used in Unix and Unix-like OS for automation. ● Generally used to build executable programs and libraries from source code. ● Besides building programs, it can also manage any project where some files must be updated automatically whenever other files change. ● FYI: make is not limited to compiling C/C++ and programs Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/
  • 8. A short intro on Makefiles. ● According to wikipedia, A Makefile is a file which contains a set of directives used by a make build automation tool to generate target(s). ● First introduces 44 years ago, and till this day you can still find it in most programming projects. It’s widely used in Unix and Unix-like OS for automation. ● Generally used to build executable programs and libraries from source code. ● Besides building programs, it can also manage any project where some files must be updated automatically whenever other files change. ● FYI: make is not limited to compiling C/C++ and programs Sources: ● https://en.wikipedia.org/wiki/Makefile ● https://en.wikipedia.org/wiki/Make_(software) ● https://xkcd.com/149/ DISCLAIMER: I AM NOT A “GNU MAKE” EXPERT!
  • 9. Who needs Makefiles, I use Shell scripts! ● Functionality that the “Make” offers is far superior to a regular Bash script.
  • 10. Who needs Makefiles, I use Shell scripts! ● Functionality that the “Make” offers is far superior to a regular Bash script. ● Scripts are usually a sequence of instructions (procedural paradigm). However, Makefile’s lets us specify prerequisites and implications (declarative paradigm).
  • 11. Who needs Makefiles, I use Shell scripts! ● Functionality that the “Make” offers is far superior to a regular Bash script. ● Scripts are usually a sequence of instructions (procedural paradigm). However, Makefile’s lets us specify prerequisites and implications (declarative paradigm). ● With a Makefile you could simply specify “rules” for compilation, to deal with useful procedures for code maintenances for example or decide when and if we need to rebuild a file/executable.
  • 12. Who needs Makefiles, I use Shell scripts! ● Functionality that the “Make” offers is far superior to a regular Bash script. ● Scripts are usually a sequence of instructions (procedural paradigm). However, Makefile’s lets us specify prerequisites and implications (declarative paradigm). ● With a Makefile you could simply specify “rules” for compilation, to deal with useful procedures for code maintenances for example or decide when and if we need to rebuild a file/executable. ● Minimal rebuilds are possible in “Makefile” whereas the bash script requires a lot of time and effort to achieve the same.
  • 13. Who needs Makefiles, I use Shell scripts! ● Functionality that the “Make” offers is far superior to a regular Bash script. ● Scripts are usually a sequence of instructions (procedural paradigm). However, Makefile’s lets us specify prerequisites and implications (declarative paradigm). ● With a Makefile you could simply specify “rules” for compilation, to deal with useful procedures for code maintenances for example or decide when and if we need to rebuild a file/executable. ● Minimal rebuilds are possible in “Makefile” whereas the bash script requires a lot of time and effort to achieve the same. ● It’s a very old tool with somewhat old syntax, but still works well
  • 14. How Makefiles are structured. ● A makefile consists of “rules” in the following structure: target: dependencies <tab> system commands(s)
  • 15. How Makefiles are structured. Example $ make venv Target $ cat Makefile venv: ... ... ● target is a name of an action to carry out (eg: venv)
  • 16. How Makefiles are structured. Example $ make venv Target, prerequisite $ cat Makefile venv: clean ... ● target is a name of an action to carry out (eg: venv) ● dependency/prerequisite an action that needs to be run before the current target can be run.
  • 17. Example $ make venv Target, prerequisite and recipe $ cat Makefile venv: clean @python -m virtualenv -p 3 .venv ● target is a name of an action to carry out (eg: venv) ● dependency/prerequisite an action that needs to be run before the current target can be run. ● system command(s)/recipe an action that make carried out, can be more than one command and indentation must consist of a single <tab> character How Makefiles are structured.
  • 18. SHELL = /bin/sh OBJS = main.o factorial.o hello.o CFLAG = -Wall -g CC = gcc INCLUDE = LIBS = -lm hello:${OBJ} ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS} clean: -rm -f *.o core *.core .cpp.o: ${CC} ${CFLAGS} ${INCLUDES} -c $< This is a typical example of the Makefile for compiling a C/C++ hello program. This program consists of three files main.cpp, factorial.cpp and hello.cpp. How Makefiles are structured.
  • 19. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: Why bother using Makefile?
  • 20. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" Why bother using Makefile?
  • 21. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: Why bother using Makefile?
  • 22. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: ○ One can easily make mistakes (eg. ports or volume mapping) Why bother using Makefile?
  • 23. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: ○ One can easily make mistakes (eg. ports or volume mapping) ○ It’s time consuming to have to type or copy from file each time. Why bother using Makefile?
  • 24. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: ○ One can easily make mistakes (eg. ports or volume mapping) ○ It’s time consuming to have to type or copy from file each time. ○ Affects your efficiency, the list goes on… Why bother using Makefile?
  • 25. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: ○ One can easily make mistakes (eg. ports or volume mapping) ○ It’s time consuming to have to type or copy from file each time. ○ Affects your efficiency, the list goes on… ● What if this process could be simplified by just running a command like: Why bother using Makefile?
  • 26. ● If like me, you are probably tired of having to manually enter these type of commands (or have them saved somewhere in some file), everytime you need to run a script in a container: $ docker run -ti --rm --volume ${PWD}:/app --port 3000:8080 --env DISPLAY=${DISPLAY} --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device /dev/snd --device /dev/video0 name/tag bash -c "python main.py --verbose --arg_1 ${ARG_1} --arg_2 ${ARG_2} --arg_3 ${ARG_3}" ● Problems with this approach: ○ One can easily make mistakes (eg. ports or volume mapping) ○ It’s time consuming to have to type or copy from file each time. ○ Affects your efficiency, the list goes on… ● What if this process could be simplified by just running a command like: $ make run_in_container Why bother using Makefile?
  • 28. ● GNU Make (ebook pdf) ● Introduction to Make and Makefile(blog) ● Generic Makefile for your projects(GitHub) ● Automation and Make (Tutorial) ● Youtube (search query) ● Why You Should Add Makefile Into Your Python Project (blog) ● How To Use Makefiles to Automate Repetitive Tasks on an Ubuntu VPS(Tutorial) ● Using Tox with a Makefile to Automate Python related tasks(blog) Some resources to checkout.
  • 29. Mpho Mphego Software Engineer Email: mmphego@ska.ac.za Contact information SKA South Africa, a Business Unit of the National Research Foundation. We are building the Square Kilometre Array radio telescope (SKA), located in South Africa and eight other African countries, with part in Australia. The SKA will be the largest radio telescope ever built and will produce science that changes our understanding of the universe