Thanks for the tips... I think this might be a little overkill, because the solution I was looking at involved the DEBUG_CONFIGURATIONS variable. For multi-configuration generators, you can see if any items in CMAKE_CONFIGURATION_TYPES match what's inside of DEBUG_CONFIGURATIONS. Any match is a DEBUG configuration, anything that doesn't match is RELEASE.
I don't know for sure if this works for single-configuration generators, where I'd check CMAKE_BUILD_TYPE against DEBUG_CONFIGURATIONS. But I was hoping someone would comment on how to do this for single-configuration generators. Thanks in advance... On Fri, Dec 7, 2012 at 3:38 AM, Andreas Mohr <[email protected]> wrote: > Hi, > > On Fri, Dec 07, 2012 at 04:01:27AM -0500, [email protected] wrote: >> Date: Thu, 6 Dec 2012 11:54:42 -0600 >> From: Robert Dailey <[email protected]> > >> Does anyone have any code that can detect if a given configuration (by >> name) is a debug or release configuration? This should work in both >> single-configuration and multi-configuration generators. >> >> For example, in Visual Studio: >> >> Release -> Release >> MinSizeRel -> Release >> RelWithDebInfo -> Release >> Debug -> Debug >> >> Also any custom-added configurations should also work. >> >> For single configuration generators, it should also work. Example: >> >> CMAKE_BUILD_TYPE -> MinSizeRel -> should evaluate to "Release". >> CMAKE_BUILD_TYPE -> Debug -> should evaluate to "Debug". > > That's quite exactly what I'm doing right now (*dynamic*, *build-time* > calculation of required, *random-content* flag strings). > > My solution (workaround?) is to provide functions to return a Win32 batch > scriptlet > to automatically map those config names to their equivalents, > then continue filling batch file with what I actually want to do, > making use of the %var% helpers which were nicely defined by the prepended > scriptlet code. > > And of course that unfortunately means having to generate batch files to be > executed > rather than possibly adding custom targets with direkt cmake -E copy.... > handling. > > > But of course with a complex mapping of *dynamic* Debug/Release switching at > *build-time* > you most likely do need to have a build-executable foundation to get this > figured out properly. > Unless you write completely differing *static-content* scripts, > located in completely differing build tree prefixes of Debug/Release > configurations. > That's possibly a better solution since with dynamic switching > within an existing tree of payload files > you may end up getting unwanted build configuration conflicts. > > Actual possible implementation: add a scripts_[BUILD_CONFIGURATION] dir > somewhere in binary dir, for all configurations that you of course know of at > configure time > (CMAKE_CONFIGURATION_TYPES). > Then configure-time generate > only-so-slightly differing scripts there, and invoke them using some > > ${CMAKE_SOME_BINARY_SUB_DIR}/scripts_${CMAKE_CFG_INTDIR}/my_script.bat > > expression. > > > > Helper functions suitable for *dynamic* (i.e., non-configure-time-generated) > evaluation of build-configuration-related values: > > > function(sbuild_configure_batch_var_name_debug_release_string_lower_get _out) > set(${_out} "cfg_build_string_debug_release" PARENT_SCOPE) > endfunction(sbuild_configure_batch_var_name_debug_release_string_lower_get > _out) > function(sbuild_configure_batch_var_name_debug_yes_no_get _out) > set(${_out} "cfg_build_debug_yes_no" PARENT_SCOPE) > endfunction(sbuild_configure_batch_var_name_debug_yes_no_get _out) > > function(sbuild_configure_batch_scriptlet_debug_flag_get > _out_debug_flag_content) > # Provide DOS batch syntax to support dynamic Debug/Release switching in > multi-configuration generators (Visual Studio) [see CMAKE_CONFIGURATION_TYPES] > > # Within local handling, *always* query the authoritative helper for batch > variable names, > # to prevent any variable renaming issues from appearing. > sbuild_configure_batch_var_name_debug_yes_no_get(var_name_debug_yes_no) > > sbuild_configure_batch_var_name_debug_release_string_lower_get(var_name_debrel_string_lower) > set(sbuild_configure_batch_debug_flag_content " > set build_config=%1 > echo \"%0: build config: %build_config%\" > > if \"%build_config%\" == \"Release\" goto cfg_release > if \"%build_config%\" == \"Debug\" goto cfg_debug > if \"%build_config%\" == \"RelWithDebInfo\" goto cfg_release > if \"%build_config%\" == \"MinSizeRel\" goto cfg_release > > echo \"Unknown build configuration (%build_config%), please add support!\" > > rem fall-through to default Release setting (default should always be > non-debug! don't leak debug symbols...) > > rem Provide several very different variables, to satisfy any and all > potential flag requirements > rem of various build environments > > :cfg_release > set ${var_name_debug_yes_no}=no > set cfg_build_debug_enabled_int=0 > set cfg_build_release_yes_no=yes > set cfg_build_release_enabled_int=1 > set ${var_name_debrel_string_lower}=release > goto cfg_build_flags_done > > :cfg_debug > set ${var_name_debug_yes_no}=yes > set cfg_build_debug_enabled_int=1 > set cfg_build_release_yes_no=no > set cfg_build_release_enabled_int=0 > set ${var_name_debrel_string_lower}=debug > goto cfg_build_flags_done > > :cfg_build_flags_done > > " > ) > > set(${_out_debug_flag_content} > "${sbuild_configure_batch_debug_flag_content}" PARENT_SCOPE) > endfunction(sbuild_configure_batch_scriptlet_debug_flag_get > _out_debug_flag_content) > > > > HTH, > > Andreas Mohr > > -- > GNU/Linux. It's not the software that's free, it's you. -- 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
