[cmake-developers] How to set environment variable for custom command.

Alan W. Irwin irwin at beluga.phys.uvic.ca
Fri Jul 19 14:29:26 EDT 2013


On 2013-07-19 12:35-0400 Matthew Woehlke wrote:

> On 2013-07-19 10:36, Nicolas Desprès wrote:
>> In Unix shell we can do that:
>> $ VAR=foo cmd in out
>> 
>> This way the environment variable is only set in the environment of the
>> process of the command and not the in current shell like when using the
>> "export" built-in.
>> 
>> I would like to be able to do the same for a custom command in CMake.
>> Ideally I was looking for something like that:
>> 
>> add_custom_command(
>>    OUTPUT out
>>    COMMAND cmd in out
>>    DEPENDS in
>>    ENVIRONMENT VAR foo
>>    )
>> 
>> Any idea?
>
> Well, if you only care about UNIX you can always use /bin/env :-).

Actually, using env is not that platform-limiting since it is
available with MSYS.  For those not aware of the env capabilities a
simple example (setting the PATH in various ways to run different
cmake varsions) is

COMMAND ${ENV_EXECUTABLE} PATH=<whatever> ${CMAKE_COMMAND} --version

where ENV_EXECUTABLE is the result of "find_program(ENV_EXECUTABLE
env)".  Also note that env can be used to set multiple environment
variables for a particular command.

I use env a lot for the custom commands in the build_projects project.
I have found it works fine (with some care) for a number of different
generators/platforms, e.g., "Unix Makefiles" on Linux, "Ninja" (both
on Linux and for MinGW/MSYS/Windows), "MSYS Makefiles", "MinGW
Makefiles", and "NMake Makefiles Jom".

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________



More information about the cmake-developers mailing list