如何使用 CMake 传递编译器标志以使用 GTest
How to pass compiler flags with CMake to use GTest
我需要帮助设置 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.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 can be also used as separate property on targets (following this doc):
set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
显式设置功能:
target_compile_features(runTests PUBLIC cxx_range_for)
或激活特定标准(自 CMake 版本 3.8.2 以来的 afaik):
target_compile_features(runTests PUBLIC cxx_std_11)
可以找到完整的功能列表 here。
我需要帮助设置 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.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 can be also used as separate property on targets (following this doc):
set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
显式设置功能:
target_compile_features(runTests PUBLIC cxx_range_for)
或激活特定标准(自 CMake 版本 3.8.2 以来的 afaik):
target_compile_features(runTests PUBLIC cxx_std_11)
可以找到完整的功能列表 here。