- Python 98.8%
- Makefile 1.2%
| .gitignore | ||
| LICENSE.txt | ||
| make.py | ||
| makefile | ||
| README.md | ||
| umake.py | ||
µmake
µmake is a small python script to easily and quickly compile small or medium-sized C/C++ projects. It is very light and designed to be modified to adapt to specific usage.
The advantages of this tool are :
-
recursive search of all header/source files in their respective directories (like makefile wildcards)
-
multiple binary output made easy (
app1will be linked fromapp1.cpp, etc, without conflicts) -
hash system to avoid time check issues (same file content, remote files problems, etc)
Use
This repository is meant to be used as a submodule of a C/C++ project.
-
Use
git submodule addto include this tool anywhere in your project. -
Copy
makefileandmake.pytemplates in your project root folder. -
Update
UMAKE_PATHin the copiedmakefilewith the path to this submodule. -
In
make.pyupdate theConfigtemplate with the desired flags and options.
By default 3 targets can be used make (or make all as usual default of makefiles), make debug and make clean.
Be careful : clean will delete the object and binary output directories defined in make.py.
How it works
Project layout
µmake expects all the header and source files to be place in a directories specified in the configuration (in make.py).
Object files and final binaries are outputed also in directories specified in the configuration but objects files in debug and release (default) are separated.
The separation of objects files is meant to switch mode quickly (only binaries are rebuilt).
To determine if a source file needs to be recompiled an hash is saved. The hashed are saved in a JSON file at the root of the object files directory (there are in fact 2 seperate files respectively in debug oand release).
If any header file changes every source files will be recompiled to avoid any issue (hence the small or medium-size project target for this tool). This could be address in the future if needed.
Caveats
-
Header files dependencies is not implemented (any change triggers all compilation)
-
Knowing python is recommended to understand the tool for any usage above configuration change.
-
Targets management is not yet implemented (building all binaries), this can be easily address knowing python. A generic solution should be possible in the future.
-
Template configuration is meant for C++ files (cpp/hpp) for now.