我是 C++ 的新手,一直在努力编译/制作/链接/构建/任何东西,让我们看看是否有人可以帮助我。我做了一些搜索,发现其他人有类似的问题,但我尝试了他们的解决方案,但没有运气,所以这里是:
使用 C++ 11 功能(例如统一初始化、线程、 to_string
等)的简单 c++ 程序会生成 未在范围内声明“xxx”的 错误。具体来说,现在我想使用 to_string
,并在 std
命名空间中使用它,或者特别是 std::to_string
创建错误 _“to_string”不是性病_。很明显它不是用 C++ 11 编译的。
所以这是我的make文件:
#####################################
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()
#####################################
如您所见,我正在树莓派上使用 OpenCV。但是没有 C++11 函数,程序编译和运行没有问题。但我想从 C++11 添加线程和其他好东西。根据 CMAKE 文档,我添加了 set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11)
行:
https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html
它对产生的错误没有任何影响。我首先在没有 _REQUIRED
的情况下完成了它,然后再使用它。我也尝试 target_compile_features()
但 CMAKE 返回了“未知的 CMAKE 命令”。
其他细节: - 在运行 debian jessie 的树莓派 3 上编译 -CXX 编译器是 GNU 4.9.2 -CMAKE 3.0.2
原文由 DrTarr 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 3.1 之前的 CMake 版本中,我们使用
如 CMake Docs 中所述,将编译选项添加到编译器调用。
这可能不像 Alvaro 的答案那样可移植,但它更具可读性,而且因为你在 RasPi 上,我猜,GCC 和 Clang 作为目标编译器会做。
编辑: 为了完整起见:在 CMake 版本 3.1 和更新版本 中,如果要强制使用 C++11,则需要以下几行:
这会在编译期间启用此声明之后的所有目标的选项。如果您想控制更细粒度,请参阅 Alvaro 的答案或
set_taget_properties()
的 CMake Docs,然后看起来像这样:编辑: 但请注意,GCC 4 中的 C++11 支持并不完整,并且可能存在与定义标准不同的行为。