[CMake] Different configurations with Visual Studio

Michael Wild themiwi at gmail.com
Mon Jun 28 09:46:34 EDT 2010


On 28. Jun, 2010, at 15:17 , Mark Van Peteghem wrote:

> Hi,
> 
> I am using CMake to generate Visual Studio project files, later also for
> CodeBlocks.
> 
> It seems that CMake generates four different configurations for Visual
> Studio: Debug, Release, MinSizeRel and RelWithDebInfo. However, I need other
> configuations, Debug and Release, both for Win32 and MX3, in one project
> file. How do I change this?
> 
> I tried this by changing *CMAKE_CONFIGURATION_TYPES *and CMAKE_BUILD_TYPES,
> e.g.
> 
> SET(CMAKE_BUILD_TYPES Debug Release DebugMX31 ReleaseMX31)
> 
> but I have the impression that these variables cannot be changed.
> 
> -- 
> Mark

You have to change CMAKE_CONFIGURATION_TYPES in the cache. Here is some template I use:

# Xcode generator is buggy (linker flags are not inherited from compile flags
# and custom configurations don't work with shared libraries)
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
  set(CMAKE_C_FLAGS_SUPERDUPER "--super --duper" CACHE
    STRING "Flags used by the compiler during super-duper builds")
  set(CMAKE_EXE_LINKER_FLAGS_SUPERDUPER "--super --duper" CACHE
    STRING "Flags used by the linker for executables during super-duper builds")
  set(CMAKE_SHARED_LINKER_FLAGS_SUPERDUPER "--super --duper" CACHE
    STRING "Flags used by the linker for shared libraries during super-duper builds")
  set(CMAKE_MODULE_LINKER_FLAGS_SUPERDUPER "--super --duper" CACHE
    STRING "Flags used by the linker for loadable modules during super-duper builds")
  mark_as_advanced(CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_SUPERDUPER
    CMAKE_SHARED_LINKER_FLAGS_SUPERDUPER CMAKE_MODULE_LINKER_FLAGS_SUPERDUPER)
  # This variable is only set for multi-config IDE generators
  if(CMAKE_CONFIGURATION_TYPES)
    list(APPEND CMAKE_CONFIGURATION_TYPES SuperDuper)
    list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
    set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
      "Semicolon separated list of supported configuration types [Debug|Release|MinSizeRel|RelWithDebInfo|SuperDuper]"
      FORCE)
  endif()
endif()

HTH

Michael



More information about the CMake mailing list