Skip to content

HowToWorkaroundIndexer

DeHecht edited this page Oct 11, 2016 · 1 revision

How to 'fix' CDT indexer for C++11 and above

The plugin fully relies on the CMake Eclipse generator that generates the CDT Makefile Project. We have faced the issue that the CMake generator does not setup the indexer correctly in case c++11 is used. We had issues with add_definitions(-std=c++11) on some embedded compilers. Currently we still use cmake 2.8, so we cannot yet use set(CMAKE_CXX_STANDARD 11) ... so in case you also have problems you may put this in one of your modules. It is a little more than neccessary because we use gtest also for c programs.

 # Check if CXX flags have been set to c++11 -> Setup Eclipse Indexer correctly!
 # Also setup the project slightly different
 if (${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4" )
     SET(CXX_ENABLED 0)
     LIST(LENGTH CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS LIST_LEN)
     if ( ${LIST_LEN} GREATER 0 )
         SET(CXX_ENABLED 1)
     endif()

     SET(C_ENABLED 0)
     LIST(LENGTH CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS LIST_LEN)
     if ( ${LIST_LEN} GREATER 0)
         SET(C_ENABLED 1)
     endif()

     if (${C_ENABLED} EQUAL 1 AND ${CXX_ENABLED} EQUAL 1)
         # Combined project (C and CXX). This will confuse the indexer. For that reason
         # we unsert set the __cplusplus variable for the indexer, assuming C++ is only
         # used for unit tests!
         list(FIND CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "__cplusplus" GEN_MACRO_INDEX)
         if( ${GEN_MACRO_INDEX} GREATER -1 )
             list(REMOVE_AT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${GEN_MACRO_INDEX})
             list(REMOVE_AT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${GEN_MACRO_INDEX})
         endif()
         SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS} CACHE INTERNAL "")
     elseif ( (${CXX_ENABLED} EQUAL 1) AND (${CMAKE_CXX_FLAGS} MATCHES ".*-std=c\\+\\+11.*"))
         #add_definitions (-D__cplusplus=201103L)
         # CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS
         list(FIND CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "199711L" GEN_MACRO_INDEX)
         if( ${GEN_MACRO_INDEX} GREATER -1 )
             list(REMOVE_AT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${GEN_MACRO_INDEX})
             list(INSERT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${GEN_MACRO_INDEX} "201103L")
             SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS ${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS} CACHE INTERNAL "")
         endif()
     endif()
 endif()