/
Simple make system - putting it all together

Simple make system - putting it all together

So putting all the build principles together I built a makefile system which is very simple to use. Read the C++ Compiler Concepts and Make - Concepts to understand it.

You can see it in action in a tutorial video I use for my team.

To build an executable called test it involves:

  1. Place the c and cpp files for the application in a directory.

  2. Add a makefile. The makefile should list the directories with other library code you want to compile and link. Here is an example:

DIRS=\ TEST\ BAS\ include ../make/makefile.core

It links all the files together into a single statically linked binary which is either test or test.exe under windows.

It’s fast and simple.

  • It works natively on windows and it’s fast since it doesn’t invoke submake processes.

    • It doesn’t require any other tools other than GNU make and the Microsoft compiler for that platform.

  • It implements support for dependency files under Mac and Linux so if you change a header and do a build you’ll get a minimal rebuild.

  • It makes use of ccache under Mac and Linux so that if you do a second compile it’s much faster

  • Because it uses wildcard matching to build up the list of target files there is no need to manually maintain lists of source or object files.

  • It doesn’t bother with creating intermediate library files since when I ship applications I generally think it is easier to support statically linked binaries.

You can get an up to date copy of makefile.core from my public repository:

https://github.com/eliotmuirgrid/core/blob/main/make/makefile.core

To try out the makefile system you can follow the instructions for the C++ tracing sandbox.

One problem we ran into with windows with this system was the length of the command line got exceeded. @Vismay Shah needs to update the concepts site to show the solution to this problem.

 

Related content

Make a multi-file sandbox with make
Make a multi-file sandbox with make
More like this
Make recipe rule
Make recipe rule
More like this
Make - Concepts
Make - Concepts
Read with this
Create a command line tool
Create a command line tool
More like this
For dictionary iterators it makes more sense to use key and value rather than "first" and "second"
For dictionary iterators it makes more sense to use key and value rather than "first" and "second"
Read with this
Excluding platform specific files for a build
Excluding platform specific files for a build
More like this