相关疑难解决方法(0)

如何使用CMake检测编译器的C++ 11支持

如果编译器支持C++ 11,有没有办法让CMake自动检测?

因为在CMake运行期间通知用户会因为编译器不支持C++ 11而无法编译代码会很好.目前我设置了C++ 11标志.但是,如果编译器不支持它,则用户在CMake运行期间会收到编译错误而不是错误.

完美将是有效的东西find_package().但是,我没有找到任何提供所需功能的模块或功能.

另外,使用该功能检测编译器是否需要标志std=c++0x或更好std=c++11.

是否有可用的东西,或者我需要自己开发这个?

下面是我目前使用的一些代码,但它只适用于GNU'c GCC编译器.如果能有更通用的解决方案,那就太好了.

if(CMAKE_COMPILER_IS_GNUCXX)
   execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
   if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
        message(STATUS "C++11 activated.")
        add_definitions("-std=gnu++11")
   elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
        message(WARNING "C++0x activated. If you get any errors update to a compiler which fully supports C++11")
        add_definitions("-std=gnu++0x")
   else ()
        message(FATAL_ERROR "C++11 needed. Therefore a gcc compiler with a version higher than 4.3 is needed.")   
   endif()
else(CMAKE_COMPILER_IS_GNUCXX)
   add_definitions("-std=c++0x") 
endif(CMAKE_COMPILER_IS_GNUCXX)
Run Code Online (Sandbox Code Playgroud)

c++ cmake c++11

71
推荐指数
6
解决办法
4万
查看次数

在 CMakeLists 中设置 ANDROID_STL

我正在 Android Studio 2.2 中编译 C++ 库代码。我遵循新指南,在那里我将所有文件添加到我的项目中,并使用 CMake(和 CMakeLists.txt)像这样编译它。我想使用C++14 功能,以及诸如 atomic、stoi 之类的东西,但构建失败并出现错误。

error: no type named 'condition_variable' in namespace 'std'
error: no member named 'stoi' in namespace 'std'
Run Code Online (Sandbox Code Playgroud)

这是我的 CMakeLists 的样子(其他行设置源文件和其他内容):

find_library(GLES GLESv2)
include_directories(${COMMON_PATH} /usr/local/include)
set(ANDROID_STL "c++_shared")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -latomic")

add_library(native-lib SHARED ${COMMON_SRC})
target_link_libraries(native-lib ${GLES})
Run Code Online (Sandbox Code Playgroud)

我在 android 页面(这里)上找到了这篇文章,但我不知道在使用 CMakeLists 而不是 ndk-build 时如何以及是否可以做到这一点。我看到其他问题使用c++_static运行时解决它,但仅使用 ndk-build。

c++ android cmake android-ndk

4
推荐指数
2
解决办法
6290
查看次数

标签 统计

c++ ×2

cmake ×2

android ×1

android-ndk ×1

c++11 ×1