Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cmake will not compile to C++ 11 standard

Tags:

c++

c++11

cmake

I'm new to C++ and have been struggling with compiling/making/linking/building/whatever, lets see if somebody can help me out. I did some searches and found other people with similar problems but I tried their solutions with no luck, so here goes:

A simple c++ program that uses C++ 11 functionality such as uniform initialization, threads, to_string, etc... generates errors that "xxx" was not declared in the scope. Specifically right now I'd like to use to_string, and using it in the std namespace or specifically std::to_string creates the error "to_string" is not a member of STD. So clearly it's not compiling with C++ 11.

So here's my 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()
#####################################

As you can see I'm playing around with OpenCV on a raspberry pi. But without the C++11 functions the program compiles and runs no issues. But I would like to add threads and other goodies from C++11. I added the line set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11) according to the CMAKE documentation:

https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html

And it made no difference in the errors generated. I did it first without the _REQUIRED and then with it. I also tried target_compile_features() instead but CMAKE returned with "unknown CMAKE command".

Other details: -Compiling on a raspberry pi 3 running debian jessie -CXX compiler is GNU 4.9.2 -CMAKE 3.0.2

like image 273
DrTarr Avatar asked Jun 03 '16 18:06

DrTarr


People also ask

Does CMake work for C?

At a minimum, using CMake requires a C compiler, that compiler's native build tools, and a CMake executable. CMake was written in C++, requires only a C++ compiler to build, and precompiled binaries are available for most systems.

What version of C++ does CMake use?

C++26. CMake 3.25 and later recognize 26 as a valid value, no version has support for any compiler. with a compiler which does not support -std=gnu++11 or an equivalent flag will not result in an error or warning, but will instead add the -std=gnu++98 flag if supported.

Does CMake use GCC or G ++?

Usually under Linux, one uses CMake to generate a GNU make file which then uses gcc or g++ to compile the source file and to create the executable. A CMake project is composed of source files and of one or several CMakeLists.


1 Answers

Since the current cmake release is 3.10, I thought it may be appropriate to identify the newer method. While the suggestion to use add_compiler_

For anyone looking here at a more modern version of cmake (3.1+), The most appropriate answer is not to identify a version of a given compiler but to let CMAKE know what features need to be available.

target_compile_features(engine
    PRIVATE cxx_range_for
    )
like image 193
Brian Bruggeman Avatar answered Oct 20 '22 15:10

Brian Bruggeman