Ich bin neu in C++ und habe mit Compiling/Making/Linking/Building/was auch immer gekämpft, sehen, ob mir jemand helfen kann. Ich einige Recherchen tat und fand andere Menschen mit ähnlichen Problemen, aber ich versuchte, ihre Lösungen ohne Glück, gehe so hier:cmake wird nicht nach C++ 11 Standard kompilieren
Ein einfaches C++ Programm, das C++ 11-Funktionalität wie einem einheitliche Initialisierung verwendet, Fäden, to_string
, etc ... generiert Fehler, "xxx" wurde nicht im Bereich deklariert. Speziell jetzt möchte ich to_string
verwenden, und die Verwendung in std
Namespace oder speziell std::to_string
erstellt den Fehler "to_string" ist kein Mitglied von STD. So klar ist es nicht mit C++ kompiliert 11.
Also hier ist meine Make-Datei:
#####################################
cmake_minimum_required (VERSION 2.8)
project (raspicam_test)
find_package(raspicam REQUIRED)
find_package(OpenCV)
IF (OpenCV_FOUND AND raspicam_CV_FOUND)
MESSAGE(STATUS "COMPILING OPENCV TESTS")
add_executable (main main.cpp)
#target_compile_features(main PRIVATE cxx_range_for)
set_property(TARGET main PROPERTY CXX_STANDARD 11)
target_link_libraries (main ${raspicam_CV_LIBS})
ELSE()
MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
ENDIF()
#####################################
Wie man sehen kann ich das Spiel mit OpenCV auf einem Himbeer-pi. Aber ohne die C++ 11 Funktionen kompiliert das Programm und läuft keine Probleme. Aber ich möchte Threads und andere Goodies aus C++ 11 hinzufügen. Ich habe die Linie set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11)
nach der CMAKE Dokumentation:
https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html
Und es machte keinen Unterschied in den erzeugten Fehler. Ich habe es zuerst ohne die _REQUIRED
gemacht und dann damit. Ich versuchte auch target_compile_features()
stattdessen aber CMAKE kehrte mit "unbekanntem CMAKE-Befehl" zurück.
Weitere Details: -Compiling auf einem Himbeer-pi 3 läuft debian jessie -CXX Compiler GNU 4.9.2 -CMAKE 3.0.2
erkannte ich, dass ich nur CMAKE 3.0.2 und die Dokumentation Ich war für CMAKE 3.1 verbunden, vielleicht ist es nicht, dass CXX_STANDARD Eigenschaft nicht unterstützt? Was ich am Ende benutzt habe, war "set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} -std = C++ 11 ")", was für mich funktionierte. Würde eine neuere Version von CMAKE mit der Methode set_property arbeiten? Hat jemand einen Vorteil gegenüber dem anderen? – DrTarr
CXX_STANDARD war neu in 3.1 https://cmake.org/cmake/help/v3.1/release/3.1.0.html#properties – drescherjm
FYI Teil Ihrer Schwierigkeiten liegen in C++ 03 als Standard für GCC 4. x mit 4.7 ist das erste C++ 11-fähig. Wenn Sie GCC 5.x haben, wird C++ 11 der Standard sein und GCC 6.x C++ 14 wird der Standard sein. –