Update README.md

This commit is contained in:
2026-08-31 17:11:29 +02:00
parent 7323b73fa6
commit 72b5585321

View File

@@ -1,46 +1,41 @@
**Basic Overview**
This is a lightweight/dependency free C build system built entirely around standard POSIX tools. It introduces a python style virtual environment for your C projects using a simple shell script. It tracks your compiler, linker flags, and build options in a local state file without needing cmake or other heavy build generators.
makemake is a lightweight/dependency-free C build system built entirely around standard POSIX tools. It brings a python-style virtual environment to your C projects using a simple shell script. It tracks your compiler, linker flags, project version, and build options in a local state file without needing cmake or other heavy build generators.
**Example Use**
To get started with a fresh project create your directory and run the initialization command.
To get started with a fresh project, create your directory and run the initialization command:
`make init`
Next activate your virtual environment by sourcing the configuration script into your current shell session.
Next, activate your virtual environment by sourcing the configuration script into your current shell session:
`. config/activate` (or `source config/activate`) the former is simply POSIX compliant.
`. config/activate` (or `source config/activate` the former is simply POSIX compliant).
Once you are inside the environment you can run your builds and clean up whenever you want.
Once you are inside the environment, you can run your builds and clean up whenever you want:
`make debug`
`make build`
`make release`
`make clean`
**What Each Build Target Does**
* init sets up the required folder structure and generates the activation script
* debug compiles your code with debug symbols enabled and optimization turned off
* build compiles your code for regular development use using your custom flags
* release updates the internal version timestamp and compiles an optimized production binary
* clean removes all intermediate object files and generated makefiles
* **init** sets up the required folder structure and generates the activation script.
* **debug** compiles your code using your configured debug flags (typically with debug symbols enabled and optimization turned off).
* **build** compiles your code using your configured build flags (typically used for optimized production binaries).
* **clean** removes all intermediate object files, generated makefiles, and output binaries.
**Example env_set Commands**
You can adjust your toolchain and compiler options dynamically using the `env_set` function while the environment is active.
You can adjust your toolchain, compiler options, and project version dynamically using the `env_set` function while the environment is active.
Example uses:
```
env_set CC cc
env_set CFLAGS -std=c17 -pedantic -Wall -Wextra
env_set DEBUG_FLAGS -g3 -O0
env_set RELEASE_FLAGS -O2 -DNDEBUG
env_set LIBS -lm
```
* `env_set CC cc`
* `env_set VERSION _v1.0.0`
* `env_set CFLAGS -std=c17 -pedantic -Wall -Wextra`
* `env_set DEBUG_FLAGS -g3 -O0`
* `env_set BUILD_FLAGS -O2 -DNDEBUG`
* `env_set LIBS -lm`
**Tips**
1: If you update a .h file you MUST do a `make clean` before building again otherwise the header changes will not be used.
2: if you remove a .c file, you MUST do a `make clean` or manually remove .o files, otherwise they will never be wiped (even if they are no longer linked, it will just waste some disk-space)
1. If you update a `.h` file you MUST do a `make clean` before building again, otherwise the header changes will not be used.
2. If you remove a `.c` file, you MUST do a `make clean` or manually remove `.o` files, otherwise they will never be wiped (even if they are no longer linked, it will just waste some disk-space).