[CMake] Setting environment variables in custom command

Robert Dailey rcdailey at gmail.com
Mon Dec 12 15:05:40 EST 2011


On Mon, Dec 12, 2011 at 1:53 PM, Michael Wild <themiwi at gmail.com> wrote:

> > CMake script would imply that it runs as part of the configuration
> > process. I can't build an installer until all binaries are compiled and
> > linked, so it needs to be a target in visual studio.
>
> Wrong.
>
> add_custom_command(
>  COMMAND ${CMAKE_EXECUTABLE} -DVAR=VAL
>    -P ${PROJECT_BINARY_DIR}/script.cmake
>  DEPENDS ${PROJECT_BINARY_DIR}/script.cmake
>  WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
>  COMMENT "Running script.cmake"
>  VERBATIM)
>

Interesting, I didn't even think about doing this. Good job :) I will do
this.

I can use add_custom_target instead though, right? Why do you use
add_custom_command here? I don't know how that translates in Visual Studio.


> >
> > Problem with pushing this out to a batch file is that I only have 9
> > parameters maximum that I can use to pass CMake variables. I need more
> > than 9, as you can see from the number of variables I use in the script
> > I sent you. I can't think of a good design for this. Not to mention I
> > hate batch files.
>
> Configured CMake file, it is.
>
> set(VAR1 VAL1)
> set(VAR2 VAL2)
> set(VAR3 VAL3)
> configure_file(script.cmake.in ${PROJECT_BINARY_DIR}/script.cmake @ONLY)
>
>
> Where script.cmake.in could look like this:
>
> set(ENV{VAR1} "@VAR1@")
> set(ENV{VAR2} "@VAR2@")
> set(ENV{VAR3} "@VAR3@")
> message(STATUS
>  "DEBUG: VAR1=$ENV{VAR1}, VAR2=$ENV{VAR2}, VAR3=$ENV{VAR3}")
>
>
> >
> > But moving it out to a batch file will guarantee that I can setup the
> > environment properly (set environment variables) and also when users
> > change the way the installer works, CMake won't need to be reconfigured,
> > which is a huge plus.
> >
> > Any advice here on how I could setup my batch file to accept more than 9
> > parameters from CMake?
>
> Make it a configured file. Either batch or CMake script, as shown above.


If I use a CMake script, I won't need it to be configured, right? As I can
pass in as many -D arguments as I want it seems.

I definitely like CMake scripts better than batch files, so I will go with
CMake scripts. Thanks for the insight.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20111212/2d56be01/attachment.htm>


More information about the CMake mailing list