|
From: | John Calcote |
Subject: | RE: Using environmnet variables in make |
Date: | Fri, 27 Feb 2009 09:50:04 -0700 |
Kaylan, There are two contexts for the export keyword here. Make
supports an export keyword, and the shell also support an export keyword. These
two contexts are separate and not related to each other in any way. When a *command*
uses export, its context is only within the shell assigned to run that command.
This is why you need to ensure that both the export command, and
the following command that uses the exported shell variable are both executed
by the same shell. Since each command is executed by a separate shell, you need
to use a semicolon and an optional backslash. If you don’t want to use a backslash,
you can simply append the two lines into one like this: test: export QA_STEP=start; touch ${QA_STEP} Outside of *commands*, the word export is used to
communicate that a *make* variable should be exported to child processes
of the current make process—so that make variable will be available to child
make processes – like this: export QA_STEP_MAKE_VAR=start test: touch $(QA_STEP_MAKE_VAR) Also note the difference in dereference syntax. Make variables
are dereferenced by make before the command is passed to the shell by using $()
syntax, whereas shell variables are dereferenced by the shell after it receives
the command, by using the ${} syntax. John From: kalyan
[mailto:address@hidden i guess backslash wouldnt work
because export is not recognized as a shell command in make.. On Fri, Feb 27, 2009 at 4:38 AM, John Calcote <address@hidden> wrote: Alan,
make executes each line in a separate shell, so QA_STEP will
not be set in
|
[Prev in Thread] | Current Thread | [Next in Thread] |