[CMake] Newbie: Building multiple configurations (x86/x64, MSVC/MinGW-W64, etc.)

John Drescher drescherjm at gmail.com
Fri May 7 12:32:18 EDT 2010


On Fri, May 7, 2010 at 11:53 AM, Alok Govil <alokgovil at hotmail.com> wrote:
> Hi all,
>
> I am trying to use CMake to build my code under multiple configurations:
>
> 1.  x86 and x64
> 2.  MSVC various versions and MinGW-W64 mainly
> 3.  Debug and release (optional)
>
> In each case I would like to link the code with a corresponding pre-compiled
> version of UnitTest++.
> (There is always an option to include UnitTest++ as a target into the
> project, but I do not see the
> point in building UnitTest++ on each run and for each project where
> UnitTest++ is used.  Please let
> me know if the direction I am taking here is not correct.)
>
> The case for MinGW-W64 seems to be more involved since they have two
> separate toolchains for
> x86 and x64.  How would I even write CMakeLists.txt for these two such that
> correct paths to x86
> and x64 bin folders is recognized?
>
> Another thing I would like to do is to specify folders where the output
> binaries are created using
> EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH.  This would again be based
> on the
> configuration used (MinGW-64 vs. MSVC, and x86 vs. x64)
>
> I have looked into the following, but have not been able to figure it all
> out as yet:
>
>     From:  http://www.elpauer.org/stuff/learning_cmake.pdf
>
>         TARGET_LINK_LIBRARIES(wakeup RELEASE ${wakeup_SRCS})
>         TARGET_LINK_LIBRARIES(wakeupd DEBUG ${wakeup_SRCS})
>
>     Notes:
>     - This allows specifying different libraries for debug and release, but
> there does not seem to
>       be an option to use the same method to specify different libraries for
> x86 vs. x64.
>
>     From:  http://www.cmake.org/pipermail/cmake/2009-June/030072.html
>
>         # check 64 bit
>         if( CMAKE_SIZEOF_VOID_P EQUALS 4 )
>             set( HAVE_64_BIT 0 )
>         else()
>             set( HAVE_64_BIT 1 )
>         endif()
>
> Thanks,
>

You really should not be using the same binary folder for all these
different configurations. Use 1 binary folder tree for each build. Or
in the case of a multi-configuration generator like visual studio you
use 1 binary folder per architecture. Also separate compiler versions
in separate build trees since they build incompatible binaries.

John


More information about the CMake mailing list