我需要帮助设置gtest以在编译时添加额外的标志。目前,我收到了这个警告:
warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11
我的CMakeLists文件如下所示:
cmake_minimum_required(VERSION 2.6)
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(runTests tests.cpp)
target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)\
它是使用本教程创建的:
我应该在哪里添加-std = c ++ 11标志来满足此警告?
答案 0 :(得分:0)
您可以通过几种方式来解决此问题。旁注,你实际上使用的是高达2.6的版本的CMake吗?或者您的环境是否需要将其用于向后兼容?
第一个选项:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(${PROJECT_NAME}_CXX_FLAGS "${${PROJECT_NAME}_CXX_FLAGS} -std=c++11")
set(${PROJECT_NAME}_CMAKE_CXX_FLAGS "${${PROJECT_NAME}_CMAKE_CXX_FLAGS} -std=c++11")
或者,如果您的编译器不支持,则可以改为使用-std=c++0x
。
此外,您可以使用以下代码检查您的编译器是否支持其中一个:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
会向你的COMPILER_SUPPORTS_CXX11
变量输出一个布尔值,然后你可以进一步测试它并相应地设置你的标志。
第二个选项是使用CMAKE_CXX_STANDARD
变量as described in documentation。这也可以用作目标的单独属性(this doc之后):
set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
答案 1 :(得分:0)
明确设置功能:
target_compile_features(runTests PUBLIC cxx_range_for)
或者激活特定标准(自CMake版本3.8.2以来的afaik):
target_compile_features(runTests PUBLIC cxx_std_11)
可以找到完整的功能列表here。