[CMake] Chasing up: XCode 3.2.4 and CMake 2.8.2, setting GCC version to 4.0

David Cole david.cole at kitware.com
Tue Jan 4 12:11:06 EST 2011


On Tue, Jan 4, 2011 at 9:59 AM, John Clayton <johnc at filewave.com> wrote:

> I have a solution for the problem of creating XCode 3.2.x project on a 10.6
> machine that are to target the 10.4u SDK.
>
> Here's what I did (thanks to the OGRE and Open Scene Graph projects - which
> exposed me to this solution).
>
> WARNING: my solution assumes a 32 bit build, so here goes:
>
> Here's how: put this right at the top of the CMakeLists.txt - in my case,
> the very top level one.
>
> if (APPLE)
>   # Force gcc <= 4.0 on Mac OS X because 4.2 is not supported prior to Mac
> OS X 10.5
>   include(CMakeForceCompiler)
>   CMAKE_FORCE_C_COMPILER(gcc-4.0 GNU)
>   CMAKE_FORCE_CXX_COMPILER(g++-4.0 GNU)
>   SET(CMAKE_SIZEOF_VOID_P 4)
> endif ()
>
> set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0")
>
>
> so, what's it do??
>
> the FORCE_C_COMPILER stuff is going to ensure that the 4.0 series GCC
> compiler is picked up, which is really useful when the compiler-test phases
> of cmake get run.  What isn't obvious though is that when this is done, some
> tests the ptr size are NOT carried out any longer, which impacted our
> project - so here's the caveat: I'm forcing the CMAKE_SIZEOF_VOID_P to 4,
> which means the rest of our codebase goes with a 32 bit build.  For me, not
> a problem - for you - good luck :-)
>
> The CMAKE_XCODE_ATTRIBUTE_GCC_VERSION is *also* required.  This forces the
> GCC_VERSION attribute within the xcode configuration to be 4.0 instead of
> 4.2 (assuming build platform of 10.6).
>
> Take note; if you leave the CMAKE_XCODE_ATTRIBUTE_GCC_VERSION out - then
> the Xcode GCC version will *still be 4.2* - so you need both of these
> settings in the CMakeLists.txt file.
>
> If anyone can improve on this - I'd appreciate it, thanks for all your help
> and good luck with those 10.4u builds from a 10.6.x machine!
>
>
>
>
> John Clayton
>
> ---------------------------
> FileWave (Europe) GmbH
> St. Gallerstrasse 1
> CH - 9500 Wil
>
> Phone: +41 71 914 30 80
> Fax: +41 71 914 30 81
> Web: www.filewave.com
> Skype: johncclayton
>
>
>
>
> On 03.01.2011, at 14:36, John Clayton wrote:
>
> Hi All,
>
> i'm still having problems getting the CMAKE_XCODE_ATTRIBUTE_GCC_VERSION
> flag to properly force the compiler version I want to use for my project.
>
> I'm using XCode 3.2.5, on a Mac 10.6.3 machine - trying to target a Max OS
> X Tiger 10.4u build.  I get compiler errors because the gcc-4.2 compiler is
> being used in the compiler-test stage of CMake.
>
> I thought CMAKE_XCODE_ATTRIBUTE_GCC_VERSION could be used to force the
> compiler setting to 4.0?
>
> My top level CMakeLists.txt file has this as its first few lines - is this
> the correct way to use this option?
>
> PROJECT( FileWave )
> cmake_minimum_required(VERSION 2.6)
> set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0")
>
> The error I get after running an XCode based generator is:
> -- The C compiler identification is GNU
> -- The CXX compiler identification is GNU
> -- Checking whether C compiler has -isysroot
> -- Checking whether C compiler has -isysroot - yes
> -- Checking whether C compiler supports OSX deployment target flag
> -- Checking whether C compiler supports OSX deployment target flag - yes
> -- Check for working C compiler using: Xcode
> -- Check for working C compiler using: Xcode -- broken
> CMake Error at /Users/john/CMake/Modules/CMakeTestCCompiler.cmake:52
> (MESSAGE):
>   The C compiler "/usr/bin/gcc-4.0" is not able to compile a simple test
>   program.
>
>   It fails with the following output:
>
>    Change Dir: /Users/john/src/TRUNK/BuildSystem/Xcode/CMakeFiles/CMakeTmp
>
>
>
>   Run Build Command:/Users/john/CMake/bin/cmakexbuild -project
>   CMAKE_TRY_COMPILE.xcodeproj build -target cmTryCompileExec -configuration
>   Debug
>
>
>
>   === BUILD NATIVE TARGET cmTryCompileExec OF PROJECT CMAKE_TRY_COMPILE
> WITH
>   CONFIGURATION Debug ===
>
>   Check dependencies
>
>   GCC 4.2 is not compatible with the Mac OS X 10.4 SDK (file
> testCCompiler.c)
>
>   GCC 4.2 is not compatible with the Mac OS X 10.4 SDK (file
> testCCompiler.c)
>
>   ** BUILD FAILED **
>
>
>
>
> <pastedGraphic.tiff>
>
>
>
> John Clayton
>
> ---------------------------
> FileWave (Europe) GmbH
> St. Gallerstrasse 1
> CH - 9500 Wil
>
> Phone: +41 71 914 30 80
> Fax: +41 71 914 30 81
> Web: www.filewave.com
> Skype: johncclayton
>
>
>
>
>
>
> _______________________________________________
> 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
>


The underlying problem here is that my bug fix for
http://public.kitware.com/Bug/view.php?id=9125 was insufficient. Woefully so
for people who rely on try_compile results in their projects.

The real fix would also involve propagating the
CMAKE_XCODE_ATTRIBUTE_GCC_VERSION setting to generated projects for
try_compile operations. try_compile operations should use the same compiler
and flags (and SDKs and ...) as the top level project. Anything else is just
"a hack" to get *something* to work with the system as-is.

I would recommend doing your builds with the "Unix Makefiles" generator for
the builds where you *have* to specify the gcc 4.0 compiler.

For Xcode builds, use the 10.6 SDK (so you can use gcc 4.2), but with the
10.4 deployment target. That should work ok. Should be safe, too, as long as
you have regular builds with the 10.4 SDK and gcc 4.0 to make sure you don't
introduce hard dependencies on stuff introduced in 10.5 and later.

In the meantime, sounds like it's time for a related bug report on this new
manifestation of an old issue. :-(


HTH,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110104/84a7523f/attachment.htm>


More information about the CMake mailing list