No project description provided
Project description
Cook is a task-centric build system with simple declarative recipes specified in Python.
Getting Started
Tasks are declared in a recipe.py
file using the ~cook.manager.create_task
function. Each task must have a unique name, may depend on files or other tasks, and can execute an action, typically a shell command. The simple example below creates a C source file, compiles it, and executes the binary.
>>> from cook import create_task
>>> create_task("src", targets=["hello.c"],
... action="echo 'int main() { return 0; }' > hello.c") # doctest: +IGNORE_RESULT
>>> create_task("cc", dependencies=["hello.c"], targets=["hello"],
... action="cc -o hello hello.c") # doctest: +IGNORE_RESULT
>>> create_task("hello", dependencies=["hello"], action="./hello") # doctest: +IGNORE_RESULT
Running cook ls
from the command line lists all known tasks, e.g.,
:cwd: examples/getting_started
$ cook ls
<task `src` @ /.../recipe.py:3>
<task `cc` @ /.../recipe.py:4>
<task `hello` @ /.../recipe.py:5>
Running cook exec hello
creates the source file, compile it, and executes the binary. We use --log-level=debug
to provide additional information here.
:cwd: examples/getting_started
:stderr:
$ cook --log-level=debug exec hello
DEBUG: <task `src` @ .../recipe.py:3> is stale because one of its targets is missing
DEBUG: started <task `src` @ .../recipe.py:3>
DEBUG: completed <task `src` @ .../recipe.py:3> in ... seconds
DEBUG: <task `src` @ .../recipe.py:3> created `hello.c`
DEBUG: <task `cc` @ .../recipe.py:4> is stale because one of its targets is missing
DEBUG: started <task `cc` @ .../recipe.py:4>
DEBUG: completed <task `cc` @ .../recipe.py:4> in ... seconds
DEBUG: <task `cc` @ .../recipe.py:4> created `hello`
DEBUG: <task `hello` @ .../recipe.py:5> is "stale" because it has no targets
DEBUG: started <task `hello` @ .../recipe.py:5>
DEBUG: completed <task `hello` @ .../recipe.py:5> in ... seconds
To rerun a task, tell Cook to reset it.
:cwd: examples/getting_started
:stderr:
$ cook reset cc
INFO: reset 1 task
The full set of available commands can be explored using cook --help
as shown below.
Tasks Are Dumb; Contexts Are Smart
~cook.task.Task
s do not provide any functionality beyond storing metadata, including
targets
, the files generated by the task,dependencies
, the files the task depends on,action
, the~cook.actions.Action
to execute when the task is run,task_dependencies
, other tasks that should be executed first,location
, filename and line number where the task was defined.
All logic is handled by ~cook.contexts.Context
s which are applied to each task when it is created. For example, ~cook.contexts.create_group
adds all tasks created within the context to a group. This group can be executed to execute all child tasks.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.