Jestem nowicjuszem w C++ i zmagałem się z kompilacją/tworzeniem/łączeniem/budowaniem/cokolwiek, zobaczmy, czy ktoś może mi pomóc. Zrobiłem kilka wyszukiwań i znalazłem inne osoby z podobnymi problemami, ale próbowałem ich rozwiązań bez powodzenia, więc oto:cmake nie skompiluje się do standardu C++ 11
Prosty program w C++, który wykorzystuje funkcjonalność C++ 11, takie jak jednolita inicjalizacja, wątki, to_string
, itp ... generuje błędy, które nie zostały zadeklarowane jako "xxx" w zakresie. W tej chwili chciałbym użyć to_string
, a używanie go w przestrzeni nazw std
lub konkretnie std::to_string
tworzy błąd "to_string" nie jest członkiem STD. Widać więc, że nie jest to kompilacja z C++ 11.
więc oto mój 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()
#####################################
Jak widać jestem zabawy z OpenCV na pi malinowym. Ale bez funkcji C++ 11 program kompiluje i nie uruchamia żadnych problemów. Ale chciałbym dodać wątki i inne gadżety z C++ 11. I dodaje linię set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11)
zgodnie z dokumentacją CUpewnij:
https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html
I nie ma różnicy w generowanych błędów. Zrobiłem to najpierw bez _REQUIRED
, a następnie z nim. Próbowałem też target_compile_features()
zamiast tego, ale CMAKE powrócił z "nieznanym poleceniem CMAKE".
Inne szczegóły: -Compiling na Raspberry Pi 3 systemu Ubuntu Jessie -CXX kompilator GNU 4.9.2 -CMAKE 3.0.2
Zdałem sobie sprawę, że mam tylko CMAKE 3.0.2, a dokumentacja, którą połączyłem, dotyczy CMAKE 3.1, może nie obsługuje tej właściwości CXX_STANDARD? To, co ostatecznie wykorzystałem, to "set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} -std = C++ 11 ")", który zadziałał u mnie. Czy późniejsza wersja CMAKE pracowała z metodą set_property? Czy ma się przewagę nad drugą? – DrTarr
CXX_STANDARD był nowy w wersji 3.1 https://cmake.org/cmake/help/v3.1/release/3.1.0.html#properties – drescherjm
Część twoich problemów związana jest z C++ 03, która jest domyślna dla GCC 4. x z 4.7 jest pierwszym zdolnym do C++ 11. Kiedy masz GCC 5.x, C++ 11 będzie domyślnym, a GCC 6.x C++ 14 będzie domyślnym. –