Is it a bug that project() does not append to the user-specified configurations? Sure seems like one...<br clear="all"><div><br></div><div>---------</div>Robert Dailey<br>
<br><br><div class="gmail_quote">On Fri, Jan 13, 2012 at 4:52 PM, Michael Hertling <span dir="ltr">&lt;<a href="mailto:mhertling@online.de">mhertling@online.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On 01/13/2012 05:06 PM, David Cole wrote:<br>
&gt; On Fri, Jan 13, 2012 at 10:22 AM, Michael Hertling &lt;<a href="mailto:mhertling@online.de">mhertling@online.de</a>&gt; wrote:<br>
&gt;&gt; On 01/12/2012 10:23 PM, Robert Dailey wrote:<br>
&gt;&gt;&gt; I see there is documentation for this but it doesn&#39;t have an implementation<br>
&gt;&gt;&gt; for VS generators:<br>
&gt;&gt;&gt; <a href="http://www.cmake.org/Bug/view.php?id=5811" target="_blank">http://www.cmake.org/Bug/view.php?id=5811</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Any status updates on this bug? I&#39;d like to be able to create my own debug<br>
&gt;&gt;&gt; configuration called DebugStatic that uses the /MTd flag in all projects to<br>
&gt;&gt;&gt; link statically against the Microsoft libraries such as CRT.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Any help?<br>
&gt;&gt;<br>
&gt;&gt; Look at the following exemplary project:<br>
&gt;&gt;<br>
&gt;&gt; CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)<br>
&gt;&gt; PROJECT(P C)<br>
&gt;&gt; SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} DebugStatic<br>
&gt;&gt;    CACHE STRING &quot;&quot; FORCE)<br>
&gt;&gt; SET(CMAKE_C_FLAGS_DEBUGSTATIC &quot;/MTd&quot;<br>
&gt;&gt;    CACHE STRING &quot;&quot; FORCE)<br>
&gt;&gt; SET(CMAKE_EXE_LINKER_FLAGS_DEBUGSTATIC &quot;&quot;<br>
&gt;&gt;    CACHE STRING &quot;&quot; FORCE)<br>
&gt;&gt; FILE(WRITE ${CMAKE_BINARY_DIR}/main.c &quot;int main(void){return 0;}\n&quot;)<br>
&gt;&gt; ADD_EXECUTABLE(main main.c)<br>
&gt;&gt;<br>
&gt;&gt; After &quot;cmake &lt;srcdir&gt;&quot; and a subsequent &quot;cmake .&quot; from within the build<br>
&gt;&gt; directory, I can see the DebugStatic configuration appear in the VS IDE<br>
&gt;&gt; when the generated solution is opened. Is this what you intend?<br>
&gt;&gt;<br>
&gt;&gt; However, I do not see DebugStatic when I open the solution right after<br>
&gt;&gt; the initial configuration, i.e. without the reconfiguration step. Can<br>
&gt;&gt; you confirm this behavior? Does anybody know why the reconfiguration<br>
&gt;&gt; is necessary to make the custom configuration appear? This is with<br>
&gt;&gt; CMake 2.8.7 and VS 2008.<br>
&gt;&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt;<br>
&gt;&gt; Michael<br>
&gt;&gt; --<br>
&gt;&gt;<br>
&gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;<br>
&gt;&gt; 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>
&gt;&gt;<br>
&gt;&gt; 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>
&gt;&gt;<br>
&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt;<br>
&gt; I don&#39;t know why it doesn&#39;t appear straight away, (although I suspect<br>
&gt; it&#39;s because the variable is set after the project command)<br>
<br>
</div></div>Yes, that&#39;s it; placing the SET() command for CMAKE_CONFIGURATION_TYPES<br>
before PROJECT() makes the new configuration appear at once, but it is<br>
*solely* the new one. Apparently, CMake&#39;s standard configurations are<br>
defined by PROJECT() only if there aren&#39;t already any configurations<br>
in the cache. A working alternative is to drop the language(s) from<br>
PROJECT(), augment the list of configurations thereafter and use<br>
ENABLE_LANGUAGE() finally, i.e.:<br>
<br>
PROJECT(XYZ)  # &lt;-- No language(s) here!<br>
LIST(APPEND CMAKE_CONFIGURATION_TYPES ...)<br>
LIST(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)<br>
SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES}<br>
    CACHE STRING &quot;CMake configuration types&quot; FORCE)<br>
ENABLE_LANGUAGE(C)<br>
<div class="im"><br>
&gt; But you should never do this unconditionally:<br>
&gt;<br>
&gt;   SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} DebugStatic<br>
&gt;     CACHE STRING &quot;&quot; FORCE)<br>
&gt;<br>
&gt; That will simply continuously append to the variable in the cache, and<br>
&gt; it will grow on each subsequent configure in the same build tree...<br>
&gt; Real code should check whether DebugStatic is in there already, and<br>
&gt; avoiding appending if already present.<br>
<br>
</div>Uhhh... absolutely, bad mistake! Thanks for pointing this out.<br>
<div class="HOEnZb"><div class="h5"><br>
Regards,<br>
<br>
Michael<br>
--<br>
<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>
</div></div></blockquote></div><br>