Sono nuovo al C++ e ho avuto difficoltà con la compilazione/creazione/collegamento/creazione/qualsiasi cosa, vediamo se qualcuno può darmi una mano. Ho fatto alcune ricerche e ho trovato altre persone con problemi simili, ma ho provato le loro soluzioni senza fortuna, quindi ecco:cmake non verrà compilato in C++ 11 standard
Un semplice programma C++ che utilizza funzionalità C++ 11 come inizializzazione uniforme, thread, to_string
, ecc ... genera errori che "xxx" non è stato dichiarato nell'ambito. Specificamente ora mi piacerebbe usare to_string
e usarlo nello spazio dei nomi std
o nello specifico std::to_string
crea l'errore "to_string" non è un membro di STD. Quindi, chiaramente non è la compilazione con C++ 11.
Quindi, ecco la mia make file:
#####################################
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()
#####################################
Come potete vedere sto giocando intorno con OpenCV su un pi lampone. Ma senza le funzioni C++ 11 il programma si compila e non esegue problemi. Ma vorrei aggiungere thread e altre chicche da C++ 11. Ho aggiunto la linea set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11)
in base alla documentazione CMAKE:
https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html
e ha fatto alcuna differenza negli errori generati. L'ho fatto prima senza lo _REQUIRED
e poi con esso. Ho anche provato target_compile_features()
, ma CMAKE è tornato con "comando CMAKE sconosciuto".
Altri particolari: -Compiling su un Raspberry Pi 3 in esecuzione Debian Jessie -CXX compilatore GNU è 4.9.2 -CMAKE 3.0.2
Mi sono reso conto che avevo solo CMAKE 3.0.2 e la documentazione che ho collegato era per CMAKE 3.1, forse non supporta quella proprietà CXX_STANDARD? Quello che ho finito per usare era "set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} -std = C++ 11 ")", che ha funzionato per me. Una versione successiva di CMAKE funzionava con il metodo set_property? Uno ha un vantaggio rispetto all'altro? – DrTarr
CXX_STANDARD era nuovo in 3.1 https://cmake.org/cmake/help/v3.1/release/3.1.0.html#properties – drescherjm
FYI parte delle tue difficoltà sta nel C++ 03 che è l'impostazione predefinita per GCC 4. x con 4.7 è il primo C++ 11 in grado. Quando hai GCC 5.x, C++ 11 sarà il default e GCC 6.x C++ 14 sarà il default. –