<div class="gmail_quote">On Sun, Apr 19, 2009 at 1:56 PM, Eric Noulard <span dir="ltr">&lt;<a href="mailto:eric.noulard@gmail.com" target="_blank">eric.noulard@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

2009/4/19 Philip Lowman &lt;<a href="mailto:philip@yhbt.com" target="_blank">philip@yhbt.com</a>&gt;:<br>
<div>&gt; I encountered this the other day.  Is this a bug?<br>
<br>
</div>I don&#39;t think so.<br>
More comment inside code:<br>
<div><br>
&gt; project(Foo)<br>
&gt; cmake_minimum_required(VERSION 2.6)<br>
&gt; set(WTFO ON)<br>
<br>
</div>You define the WTFO which is not cached.<br>
<div><br>
&gt; message(&quot;WTFO is ${WTFO}&quot;)<br>
<br>
<br>
&gt; option(WTFO &quot;wtfo&quot; OFF)<br>
<br>
</div>Now you define an option with the same name which is a variable but CACHED.<br>
<div><br>
&gt; message(&quot;WTFO is ${WTFO}&quot;)<br>
&gt;<br>
&gt; Here&#39;s the output...<br>
&gt;<br>
&gt; (first run)<br>
&gt; WTFO is ON<br>
&gt; WTFO is OFF<br>
<br>
</div>First run shows you the var value.<br>
<br>
Then the option overwrite the uncached var with its default value, i.e. OFF.<br>
<div><br>
&gt; (second run)<br>
&gt; WTFO is ON<br>
<br>
</div>You set the cached variable to ON, thus the value is &quot;ON&quot; but now it<br>
reached the cache.<br>
<br>
&gt; WTFO is ON<br>
<br>
Your option retrieve it&#39;s value from the cache.<br>
<br>
<br>
I think the &quot;bug&quot; is that you may define an option which overwrite an<br>
uncached var.</blockquote><div><br>This is exactly what I wanted to do though.  In this case I don&#39;t care what options are being exposed to the cache, I just want to overwrite what someone is doing &quot;downstream&quot;.  I know of at least 2 fixes to the problem I ran into, but I&#39;m just trying to integrate my knowledge of CMake to understand things better.<br>
<br>I guess my question is why is it when you call SET(...CACHE) or OPTION(), pre-existing local variables of the same name are removed (or in the case of a boolean, redefined)?  See both implementations of cmMakefile::AddCacheDefinition().  If you have a pre-existing local variable defined it&#39;s going to be defined on the next run so you&#39;re just delaying the inevitable by one configure.  What use case justifies the removal of the local variable that I&#39;m not seeing?<br>
<br></div></div>-- <br>Philip Lowman<br>