@define
Use this directive to declare global variable (visible to all goals).
The variable will be declared as environment variable (via export
).
Example:
@define A hello
@define B "${A} world"
@define C 'hello world'
This directive is valid in any place in Makesurefile
. However, we recommend:
- place frequently changed variables (like versions) to the top of
Makesurefile
- place infrequently changed variables closer to the goals/libs that use them
Variable defined with @define
can be overridden with a variable passed in invocation via -D
parameter.
Overall the precedence for variables resolution is (higher priority top):
./makesure -D VAR=1
@define VAR 2
inMakesurefile
VAR=3 ./makesure
The precedence priorities are designed like this on purpose, to prevent accidental override of @define VAR='value'
definition in file by the environment variable with the same name. However, sometimes this is the desired behavior. In this case you can use:
@define VAR "${VAR}" # using the same name, or
@define VAR1 "${ENV_VAR}" # using different name, or
@define VAR2 "${VAR_NAME:-default_value}" # if need the default value when not set
This allows to use environment variables VAR
, ENV_VAR
, and VAR_NAME
to set the value of VAR
, VAR1
and VAR2
.
Please note, the parser of makesure
is somewhat stricter here than shell's one:
@define HW ${HELLO}world # makesure won't accept
@define HW "${HELLO}world" # OK