Updated README.md
This commit is contained in:
parent
27e953e62b
commit
7b5833675e
1 changed files with 74 additions and 9 deletions
83
README.md
83
README.md
|
@ -3,10 +3,28 @@
|
||||||
Toke (TOML Make) is a simple command runner inspired by Make but uses TOML (Tom's Obvious, Minimal Language) instead of Makefiles.
|
Toke (TOML Make) is a simple command runner inspired by Make but uses TOML (Tom's Obvious, Minimal Language) instead of Makefiles.
|
||||||
This project was created for fun as an alternative to Make, because I was looking for a simple command runner/build system but didn't like the Makefile syntax.
|
This project was created for fun as an alternative to Make, because I was looking for a simple command runner/build system but didn't like the Makefile syntax.
|
||||||
|
|
||||||
# How to Use Toke
|
# How to use toke
|
||||||
|
|
||||||
Toke works by reading a TOML file named `tokefile.toml` (or any variation of it like `Tokefile.toml`, `tokefile`, etc.) in your project directory. This file contains definitions of variables, targets, and their respective commands.
|
Toke works by reading a TOML file named `tokefile.toml` (or any variation of it like `Tokefile.toml`, `tokefile`, etc.) in your project directory. This file contains definitions of variables, targets, and their respective commands.
|
||||||
|
|
||||||
|
You can also pass in a file to be used instead of the default one.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
toke -f my_custom_named_toke_file
|
||||||
|
```
|
||||||
|
|
||||||
|
To run a toke target, just run `toke target_name_here`
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
toke build
|
||||||
|
```
|
||||||
|
|
||||||
|
Toke then reads the TOML file, resolves variables, and then executes the specified commands for the target you provide.
|
||||||
|
|
||||||
|
It also checks for dependency cycles in your targets to prevent infinite loops.
|
||||||
|
|
||||||
## Example Tokefile
|
## Example Tokefile
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
@ -14,6 +32,7 @@ Toke works by reading a TOML file named `tokefile.toml` (or any variation of it
|
||||||
cc = "gcc"
|
cc = "gcc"
|
||||||
|
|
||||||
[targets.build]
|
[targets.build]
|
||||||
|
vars.cc = "clang"
|
||||||
cmd = "${cc} main.c -o main"
|
cmd = "${cc} main.c -o main"
|
||||||
|
|
||||||
[targets.run]
|
[targets.run]
|
||||||
|
@ -32,6 +51,9 @@ You can write your TOML file in any way you wish as long as it's structure is in
|
||||||
},
|
},
|
||||||
"targets": {
|
"targets": {
|
||||||
"build": {
|
"build": {
|
||||||
|
"vars": {
|
||||||
|
"cc": "clang"
|
||||||
|
},
|
||||||
"cmd": "${cc} main.c -o main"
|
"cmd": "${cc} main.c -o main"
|
||||||
},
|
},
|
||||||
"run": {
|
"run": {
|
||||||
|
@ -48,22 +70,65 @@ We define a variable `cc` which is set to `"gcc"`.
|
||||||
|
|
||||||
We have two targets: `build` and `run`.
|
We have two targets: `build` and `run`.
|
||||||
|
|
||||||
The `build` target compiles the code with gcc.
|
The `build` target compiles the code with clang.
|
||||||
|
|
||||||
The `run` target runs the code with some arguments. It also depends on the `build` target.
|
The `run` target runs the code with some arguments. It also depends on the `build` target.
|
||||||
|
|
||||||
To run a specific target, simply pass its name as an argument when running the Toke program.
|
# Variables
|
||||||
|
|
||||||
```
|
## Global variables
|
||||||
$ ./toke build
|
|
||||||
gcc main.c -o main
|
You can define global variables in the vars table, as seen in the above example.
|
||||||
|
|
||||||
|
## Local variables
|
||||||
|
|
||||||
|
You can specify local variables for each target. These local variables are defined under the `vars` key within each target section. If the local variable name matches a global variable, it will overwrite the global variable value for that specific target.
|
||||||
|
|
||||||
|
Here is an example:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[vars]
|
||||||
|
cc = "g++"
|
||||||
|
|
||||||
|
[target.target1]
|
||||||
|
vars.cc = "gcc"
|
||||||
|
cmd="${cc} ${cflags} main.c -o main"
|
||||||
|
|
||||||
|
[target.target2]
|
||||||
|
vars.cc = "clang"
|
||||||
|
vars.cflags = "-Wall"
|
||||||
|
cmd="${cc} ${cflags} main.c -o main"
|
||||||
|
|
||||||
|
[target.target3]
|
||||||
|
vars.cflags = "-O3"
|
||||||
|
cmd="${cc} ${cflags} main.c -o main"
|
||||||
```
|
```
|
||||||
|
|
||||||
# How Toke Works
|
In this example:
|
||||||
|
|
||||||
Toke reads the TOML file, resolves variables, and then executes the specified commands for the target you provide.
|
`target1` uses `gcc` for the `cc` variable, overriding the global value.
|
||||||
|
|
||||||
It also checks for dependency cycles in your targets to prevent infinite loops.
|
`target2` specifies `clang` for the `cc` variable and adds `-Wall` to `cflags`.
|
||||||
|
|
||||||
|
`target3` only sets `cflags` to `-O3`.
|
||||||
|
|
||||||
|
## Command line overrides
|
||||||
|
|
||||||
|
Additionally, you can override both global and local variables via command line arguments when invoking `toke`. Command line arguments follow the format `VARIABLE=value`. When provided, these values will overwrite any corresponding global or local variables.
|
||||||
|
|
||||||
|
Here's an example of using command line arguments:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
toke build CC=gcc CFLAGS=-O2
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example:
|
||||||
|
|
||||||
|
`CC=gcc` overrides the value of the `cc` variable.
|
||||||
|
|
||||||
|
`CFLAGS=-O2` overrides the value of the `cflags` variable.
|
||||||
|
|
||||||
|
These overrides allow for flexible customization.
|
||||||
|
|
||||||
# Contributing
|
# Contributing
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue