Yes, this works perfectly.<div><br></div><div>It&#39;s a bit disappointing that cache variables are, for all intents and purposes, read-only in functions. The property approach is a bit more verbose but it functions! I think &#39;set&#39; needs a new override specifically for cases like this. Something similar to &quot;PARENT_SCOPE&quot;, but something like &quot;CACHE_SCOPE&quot;, that forces CMake to first check for the existance of a cache variable with that name, and it would take precedence over any identically named variable in function scope.</div>
<div><br></div><div>On another note, you&#39;d think this would work too but it doesn&#39;t:</div><div><br></div><div>set( project_count ${new_count} CACHE INTERNAL FORCE )</div><div><br></div><div>Thanks!<br clear="all">
<div><br></div><div>---------</div>Robert Dailey<br>
<br><br><div class="gmail_quote">On Mon, Oct 10, 2011 at 2:01 PM, Glenn Coombs <span dir="ltr">&lt;<a href="mailto:glenn.coombs@gmail.com">glenn.coombs@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Calling a function pushs a new variable scope.  All variables visible in the callers scope are copied into the new scope but changes by default only affect the callee scope.  You could try using the PARENT_SCOPE option to the set command but I&#39;m not sure that will achieve what you want as it only gets you to the next scope whereas you really want a global variable.<br>

<br>You can use properties instead of variables as those are explicitly scoped.  So something like this:<br><br><div>set_property(GLOBAL PROPERTY project_count &quot;0&quot;)<br>

<br>function( define_project ... )</div><div>   get_property(old_count GLOBAL PROPERTY project_count)<br>   math( EXPR new_count &quot;${old_count}+1&quot; )</div><div>   set_property(GLOBAL PROPERTY project_count &quot;${new_count}&quot;<br>

</div><div>endfunction()<br><br>will probably work.<br><br>--<br>Glenn<br><br></div><br><div class="gmail_quote"><div><div></div><div class="h5">On 10 October 2011 17:11, Robert Dailey <span dir="ltr">&lt;<a href="mailto:rcdailey@gmail.com" target="_blank">rcdailey@gmail.com</a>&gt;</span> wrote:<br>

</div></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"><div><div></div><div class="h5">I have a function that I define in my top-most CMakeLists.txt file (on Windows using CMake version 2.8.6) called define_project() that calls add_executable, sets up compile defintions, etc etc.<div>

<br></div><div>For each time define_project() is called *anywhere* in the directory hierarchy, I need to increment a global &quot;project_count&quot; variable to keep track of how many projects were created and print that at the very end of the root CMakeLists.txt file.</div>


<div><br></div><div>So far my attempts at this have been unsuccessful. I tried creating a cache variable in the root script:</div><div><br></div><div>set( project_count 0 CACHE INTERNAL &quot;&quot; )</div><div><br></div>


<div>Then inside of my function, I do this:</div><div><br></div><div>function( define_project ... )</div><div>   math( EXPR count &quot;${project_count}+1&quot; )</div><div>   set( project_count ${count} )</div><div>endfunction()</div>


<div><br></div><div>However, &#39;project_count&#39; is always 0 each time that the function is executed.</div><div><br></div><div>How can I make this work?<br clear="all"><div><br></div><div>---------</div>Robert Dailey<br>



</div>
<br></div></div>--<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br></blockquote></div><br>
</blockquote></div><br></div>