Re: [CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX
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, fkilluswrote: > 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,
Re: [CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX
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 Bradenwrote: > 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 > wrote: > > I have been trying to compile Ogre [1] as external dependency with > >
Re: [CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX
Nice, thank you very much! This solves my problem. On Thu, Jan 21, 2016 at 3:56 PM, Nicholas Bradenwrote: > 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 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
Re: [CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX
Thanks for your suggestion! I consider trying it soon. On Wed, Jan 20, 2016 at 11:44 PM, Craig Scottwrote: > > From: fkillus >> To: cmake@cmake.org >> Cc: >> Date: Wed, 20 Jan 2016 18:41:26 +0100 >> Subject: [CMake] ExternalProject_Add() macro does not set >> CMAKE_COMPILER_IS_GNUCXX >> 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=file-view-default#OgreConfigTargets.cmake-277 >> >> > > Since Ogre is a CMake project, you may find the technique described at the > following link useful. It uses GoogleTest as its example, but it should > also apply to your situation. The approach uses ExternalProject only to > download the source at CMake time. It then pulls it into your normal build > via add_subdirectory(), so it gets all the same compiler details, etc. as > your main build because it IS part of your main build. > > http://crascit.com/2015/07/25/cmake-gtest/ > > I am not familiar with Ogre's build, so I can't comment on whether it will > play nice if pulled into a parent build like this, but it's worth a try. > The article links to a github repo which provides a fully generalised > implementation you should be able to use out of the box. > > > -- > Craig Scott > Melbourne, Australia > http://crascit.com > > -- > > 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 > -- 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
Re: [CMake] ExternalProject_Add() macro does not set CMAKE_COMPILER_IS_GNUCXX
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 CMakewrote: > 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=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 -- 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