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