[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