如何使用CMake传递编译器标志以使用GTest

时间:2017-10-24 12:42:54

标签: c++ c++11 googletest

我需要帮助设置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标志来满足此警告?

2 个答案:

答案 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