On Wednesday 02 April 2008 10:20:18 Bill Hoffman wrote:
> However, there are some variables that can help with this.
>
> CMAKE_BUILD_TYPE is only used by makefile generators and is the specific
> build for that tree.
>
> CMAKE_CONFIGURATION_TYPES is set to the list of active configurations
> (Debug, Release, etc).  It is empty for makefile builds.  So, you can
> iterate over this and construct paths etc.

I like to build multiple build types and library types in the same build 
directory.  I have BOOL configuration options for enabling STLport and shared 
libraries.  To keep the configurations from stomping on each other, I just 
have to make sure that my target names are unique.  Here is a macro that I 
use to create a unique target name:

        MACRO(MARKET_TARGET_NAME name _targetName)
            SET(${_targetName} ${name})

            # Append static or shared
            IF (BUILD_SHARED_LIBS)
                SET(${_targetName} "${${_targetName}}-shared")
            ELSE (BUILD_SHARED_LIBS)
                SET(${_targetName} "${${_targetName}}-static")
            ENDIF (BUILD_SHARED_LIBS)

            # Append stlport
            IF (MARKET_USE_STLPORT)
                SET(${_targetName} "${${_targetName}}-stlport")
            ENDIF (MARKET_USE_STLPORT)

            # Append the build type
            IF (NOT CMAKE_CONFIGURATION_TYPES)
                SET(${_targetName} "${${_targetName}}-${CMAKE_BUILD_TYPE}")
            ENDIF (NOT CMAKE_CONFIGURATION_TYPES)
        ENDMACRO(MARKET_TARGET_NAME)

When I create a library, for instance, I use the unique target name:

        MARKET_TARGET_NAME(libname targetName)
        ADD_LIBRARY(${targetName} ...)

Now I can build libname-shared, libname-shared-stlport, libname-static, and 
libname-static-stlport in the same build directory.  On Makefile 
systems,libname-shared becomes libname-shared-${CMAKE_BUILD_TYPE}, so I can 
build Debug and Release in the same build directory.

The only annoyance I have with this system is that the target names in the 
Makefile (make help) are long.  To alleviate this, I simply add aliases as 
so:

        ADD_CUSTOM_TARGET(libname)
        ADD_DEPENDENCIES(libname ${targetName})

Unfortunately, each target ends up with two listings in "make help" 
(i.e. "libname" and "libname-static-stlport-Debug"); however, I personally do 
not mind the extra noise.

Hope This Helps,
Justin
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to