[CMake] How to find the DLL's a a required package searched with FIND_PACKAGE()?

Michael Wild themiwi at gmail.com
Thu Feb 11 03:13:25 EST 2010


On 11. Feb, 2010, at 9:07 , Arjen Markus wrote:

> 
> 
> On 2010-02-11 01:20, David Cole wrote:
>> On Wed, Feb 10, 2010 at 7:16 PM, Alan W. Irwin 
> 
>>    Would setting that environment variable from cmake affect subsequent
>>    Windows
>>    builds?  I don't have any Windows development experience, but this
>>    question
>>    just came up on the PLplot list. There, we all speculated from our
>>    various
>>    Linux and Windows platform perspectives that SET(ENV{PATH} ...) just
>>    sets
>>    the PATH when you are running cmake and would have no effect on the
>>    environment for the subsequent build.  Thus, we thought you would
>>    have to
>>    externally set the PATH before running the build.  But we all could
>>    be wrong
>>    which is why I have asked this question.  :-)
>> Alan,
>> You are correct. Doing this...
>> SET(ENV{xxx} "value")
>> ...in a CMakeLists.txt file only sets an environment variable for the duration of the cmake run. It has no influence on downstream build steps.
> 
> The story with environment variables on Windows is slightly more
> complicated than that:
> - On Linux/UNIX you can set environment variables for the duration of
>  a shell process via the set (setenv) command and by putting such
>  commands in a shell script and using . (or source) to run the
>  script in the same shell. This does not happen if you run the
>  shell script normally (as it is run in a separate process then).
> 
> - On Windows (or DOS if you want to include some history) there is
>  no separate "source" command. Instead if you set an environment
>  variable in a batch file and run that batch file in a DOS-box,
>  it will keep that value even after the batch file has finished -
>  the batch file is run in the same process (an exit statement in
>  such a batch file exits the DOS-box!). If you run a separate
>  program, changes to the environment will be lost, just as under
>  Linux.
> 
> For building PLplot under Windows I extend the path first (so that
> includes the directory where the DLLs will be found) and then
> run the various commands (CMake and make and the examples). But
> that has become an "automatism".
> 
> What you could do is wrap the CMake command in a batch file,
> including the command "set path=..." and run that instead.
> 
> The drawback is that the path will be expanded each time
> you run it.
> 
> Regards,
> 
> Arjen


You might want to take a look at setlocal/endlocal:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true


Michael


More information about the CMake mailing list