@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 variable resolution is (higher priority top):
./makesure -D VAR=1@define VAR 2inMakesurefileVAR=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 using 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