2017-10-24 1 views
0

Ich brauche Hilfe beim Einrichten von gtest, um zusätzliche Flags beim Kompilieren hinzuzufügen. Derzeit erhalte ich diese Warnung:Wie Compiler-Flags mit CMake übergeben werden, GTest zu verwenden

warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11

Meine CMakeLists Datei sieht wie folgt aus:

cmake_minimum_required(VERSION 2.6) 

find_package(GTest REQUIRED) 

include_directories(${GTEST_INCLUDE_DIRS}) 

add_executable(runTests tests.cpp) 

target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)\ 

Es wurde mit diesem Tutorial erstellt:

Wo sollte Ich füge das -std = C++ 11 Flag hinzu, um diese Warnung zu erfüllen?

Antwort

0

Einstellen der Funktion explizit:

target_compile_features(runTests PUBLIC cxx_range_for) 

oder einen bestimmten Standard zu aktivieren (afaik seit CMake Version 3.8.2):

target_compile_features(runTests PUBLIC cxx_std_11) 

Vollständige Liste der Funktionen finden Sie here.

0

Es gibt wenige Möglichkeiten, dieses Problem anzugehen. Randnotiz, verwenden Sie tatsächlich CMake der Version so alt wie 2.6? Oder wird es von Ihrer Umgebung benötigt, um es für die Abwärtskompatibilität zu verwenden?

Erste Option:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(${PROJECT_NAME}_CXX_FLAGS "${${PROJECT_NAME}_CXX_FLAGS} -std=c++11") 
set(${PROJECT_NAME}_CMAKE_CXX_FLAGS "${${PROJECT_NAME}_CMAKE_CXX_FLAGS} -std=c++11") 

oder, wenn Ihr Compiler nicht, dass nicht unterstützt, können Sie -std=c++0x stattdessen verwenden.

Zusätzlich können Sie folgenden Code verwenden, um zu überprüfen, ob Ihr Compiler einen oder anderen unterstützt:

include(CheckCXXCompilerFlag) 
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) 

die ausgeben würde ein boolean den Wert Ihrer COMPILER_SUPPORTS_CXX11 Variable, und dann können Sie weiter testen und Ihre Flags gesetzt entsprechend.

Zweite Option ist CMAKE_CXX_STANDARD Variable, as described in documentation zu verwenden. Dies kann auch als separate Eigenschaft auf Ziele verwendet werden (nach this doc):

set_property(TARGET tgt PROPERTY CXX_STANDARD 11) 
Verwandte Themen