[CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX

fkillus fkillus at googlemail.com
Thu Jan 21 10:07:07 EST 2016


Nice, thank you very much! This solves my problem.

On Thu, Jan 21, 2016 at 3:56 PM, Nicholas Braden <nicholas11braden at gmail.com
> wrote:

> Ah, I ran into this quirk too - the issue is that you have the quotes
> incorrect:
>
> -DCMAKE_CXX_FLAGS="-march=native"
>
> Should be like this instead:
>
> "-DCMAKE_CXX_FLAGS=-march=native"
>
> Try that and see if it helps, I am pretty sure I ran into the exact
> same problem.
>
> On Thu, Jan 21, 2016 at 8:27 AM, fkillus <fkillus at googlemail.com> wrote:
> > Thanks for clarifying that external projects are not aware of the project
> > they are embedded in.
> > The CMAKE_COMPILER_IS_GNUCXX variable should be set automatically by
> CMake
> > as far
> > as I understand it (see https://cmake.org/Wiki/CMake_Useful_Variables).
> >
> > I narrowed down the problem by creating a minimal setup which still
> > reproduces the issue.
> > In this case the super project is simply a wrapper around an external
> dummy
> > project.
> >
> > external/CMakeLists.txt:
> >
> >   cmake_minimum_required( VERSION 3.4 )
> >   project( external )
> >   message( "External - CMAKE_COMPILER_IS_GNUCXX: "
> > ${CMAKE_COMPILER_IS_GNUCXX} )
> >   message( "External - CMAKE_CXX_COMPILER_ID: " ${CMAKE_CXX_COMPILER_ID}
> )
> >   message( "External - CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} )
> >
> > super/CMakeLists.txt:
> >
> >   cmake_minimum_required( VERSION 3.4 )
> >   project( super )
> >   message( "Super - CMAKE_COMPILER_IS_GNUCXX: "
> ${CMAKE_COMPILER_IS_GNUCXX}
> > )
> >   message( "Super - CMAKE_CXX_COMPILER_ID: " ${CMAKE_CXX_COMPILER_ID} )
> >   message( "Super - CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} )
> >   include( ExternalProject )
> >   ExternalProject_Add(
> >     external
> >     DOWNLOAD_COMMAND ""
> >     SOURCE_DIR ${CMAKE_SOURCE_DIR}/../external
> >     CMAKE_ARGS
> >       -DCMAKE_CXX_FLAGS="-march=native"
> >     INSTALL_COMMAND  ""
> >   )
> >
> > The problem occurs when the CMAKE_CXX_FLAGS variable is set inside the
> > ExternalProject_Add
> > command using quotes (i.e. "-march=native" in this example). The output
> > obtained when configuring
> > the super project with 'cmake ../super' is:
> >
> > -- The C compiler identification is GNU 5.2.0
> > -- The CXX compiler identification is GNU 5.2.0
> > -- Check for working C compiler: /usr/bin/cc
> > -- Check for working C compiler: /usr/bin/cc -- works
> > -- Detecting C compiler ABI info
> > -- Detecting C compiler ABI info - done
> > -- Detecting C compile features
> > -- Detecting C compile features - done
> > -- Check for working CXX compiler: /usr/bin/c++
> > -- Check for working CXX compiler: /usr/bin/c++ -- works
> > -- Detecting CXX compiler ABI info
> > -- Detecting CXX compiler ABI info - done
> > -- Detecting CXX compile features
> > -- Detecting CXX compile features - done
> > Super - CMAKE_COMPILER_IS_GNUCXX: 1
> > Super - CMAKE_CXX_COMPILER_ID: GNU
> > Super - CMAKE_CXX_FLAGS:
> > -- Configuring done
> > -- Generating done
> >
> > Afterwards building with 'make' results in:
> >
> > [ 12%] Creating directories for 'external'
> > [ 25%] No download step for 'external'
> > [ 37%] No patch step for 'external'
> > [ 50%] No update step for 'external'
> > [ 62%] Performing configure step for 'external'
> > -- The C compiler identification is GNU 5.2.0
> > -- The CXX compiler identification is unknown
> > -- Check for working C compiler: /usr/bin/cc
> > -- Check for working C compiler: /usr/bin/cc -- works
> > -- Detecting C compiler ABI info
> > -- Detecting C compiler ABI info - done
> > -- Detecting C compile features
> > -- Detecting C compile features - done
> > -- Check for working CXX compiler: /usr/bin/c++
> > -- Check for working CXX compiler: /usr/bin/c++ -- works
> > -- Detecting CXX compiler ABI info
> > -- Detecting CXX compiler ABI info - done
> > External - CMAKE_COMPILER_IS_GNUCXX:
> > External - CMAKE_CXX_COMPILER_ID:
> > External - CMAKE_CXX_FLAGS: "-march=native"
> > -- Configuring done
> > -- Generating done
> >
> > This shows the compiler is not correctly identified for the external
> > project. Directly configuring
> > the external project with 'cmake -DCMAKE_CXX_FLAGS="-march=native"
> > ../external' works though:
> >
> > -- The C compiler identification is GNU 5.2.0
> > -- The CXX compiler identification is GNU 5.2.0
> > -- Check for working C compiler: /usr/bin/cc
> > -- Check for working C compiler: /usr/bin/cc -- works
> > -- Detecting C compiler ABI info
> > -- Detecting C compiler ABI info - done
> > -- Detecting C compile features
> > -- Detecting C compile features - done
> > -- Check for working CXX compiler: /usr/bin/c++
> > -- Check for working CXX compiler: /usr/bin/c++ -- works
> > -- Detecting CXX compiler ABI info
> > -- Detecting CXX compiler ABI info - done
> > -- Detecting CXX compile features
> > -- Detecting CXX compile features - done
> > External - CMAKE_COMPILER_IS_GNUCXX: 1
> > External - CMAKE_CXX_COMPILER_ID: GNU
> > External - CMAKE_CXX_FLAGS: -march=native
> > -- Configuring done
> > -- Generating done
> >
> >
> > It also works if the quotations marks in the super project listfile are
> > removed. I.e. changing
> >   CMAKE_ARGS
> >    -DCMAKE_CXX_FLAGS="-march=native"
> > to
> >   CMAKE_ARGS
> >    -DCMAKE_CXX_FLAGS=-march=native
> >
> > The question is now, is it still possible to add mutiple compile flags if
> > one cannot use quotation marks?
> >
> >
> > On Wed, Jan 20, 2016 at 6:58 PM, Nicholas Braden
> > <nicholas11braden at gmail.com> wrote:
> >>
> >> Where/how is that variable normally set? External projects have no
> >> awareness of the project they are in, they just run CMake as usual the
> >> same way you would. If the variable is normally set by CMake itself,
> >> make sure that your containing project and the external project both
> >> find the same compiler. (They each do their own automatic search for
> >> compilers)
> >>
> >> On Wed, Jan 20, 2016 at 11:41 AM, fkillus via CMake <cmake at cmake.org>
> >> wrote:
> >> > I have been trying to compile Ogre [1] as external dependency with
> >> > ExternalProject_Add(). In theory this should be straightforward since
> >> > Ogre
> >> > itself also uses CMake as buildsystem. However, in the process I
> >> > encountered
> >> > the following problem:
> >> >
> >> > Ogre checks the value of the CMAKE_COMPILER_IS_GNUCXX variable in some
> >> > places (e.g. [2]). I am running Linux and compiling with g++ and
> >> > everything
> >> > works fine if I manually configure Ogre with cmake or cmake-gui.
> >> > Unfortunately, after wrapping everything inside ExternalProject_Add(),
> >> > the
> >> > CMAK_COMPILER_IS_GNUCXX variable is no longer being set correctly.
> >> >
> >> > A simple workaround is to manually set this variable, i.e.:
> >> >
> >> >  ExternalProject_Add(
> >> >     ogre
> >> >     URL https://bitbucket.org/sinbad/ogre/get/v1-9-0.zip
> >> >     CMAKE_ARGS
> >> >       -DCMAKE_INSTALL_PREFIX=${DEPENDENCIES_OUTPUT_DIR}
> >> >       -DCMAKE_COMPILER_IS_GNUCXX=${CMAKE_COMPILER_IS_GNUCXX}   #
> >> > workaround
> >> >   )
> >> >
> >> > This works, but I'm uncertain if this should be necessary. Is this a
> bug
> >> > or
> >> > a feature?
> >> >
> >> >
> >> > [1] https://bitbucket.org/sinbad/ogre
> >> > [2]
> >> >
> >> >
> https://bitbucket.org/sinbad/ogre/src/0d580c7216abe27fafe41cb43e31d8ed86ded591/CMake/Utils/OgreConfigTargets.cmake?at=default&fileviewer=file-view-default#OgreConfigTargets.cmake-277
> >> >
> >> > --
> >> >
> >> > Powered by www.kitware.com
> >> >
> >> > Please keep messages on-topic and check the CMake FAQ at:
> >> > http://www.cmake.org/Wiki/CMake_FAQ
> >> >
> >> > Kitware offers various services to support the CMake community. For
> more
> >> > information on each offering, please visit:
> >> >
> >> > CMake Support: http://cmake.org/cmake/help/support.html
> >> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> >> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> >> >
> >> > Visit other Kitware open-source projects at
> >> > http://www.kitware.com/opensource/opensource.html
> >> >
> >> > Follow this link to subscribe/unsubscribe:
> >> > http://public.kitware.com/mailman/listinfo/cmake
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160121/e8f94c62/attachment-0001.html>


More information about the CMake mailing list