首页 文章

如何知道libstdc是否支持std :: regex

提问于
浏览
3

我有一个使用std :: regex的应用程序,它在我的计算机上构建并运行良好 . 但是,在ubuntu 14.04上,它构建但不起作用,因为std :: regex没有在旧的libstdc上实现 .

我想#ifdef我的代码中的一些行来解决这个问题,但似乎找到了一个可靠的方法来确定libstdc是否支持它 .

我正在使用cmake,所以如果我能够获得该库的版本(/ usr / lib / x86_64-linux-gnu / libstdc .so.6.0.19 - > 6019),我也会很高兴 .

1 回答

  • 3

    您可以编写一个简单的测试来检查它是否有效 . 首先是CMake部分:

    include(CMakePushCheckState)
    include(CheckCXXSourceRuns)
    cmake_push_check_state()
    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
    check_cxx_source_runs("
          #include <regex>
    
          int main() {
            return std::regex_match(\"StackOverflow\", std::regex(\"(stack)(.*)\"));
          }
    " HAVE_CXX_11_REGEX)
    cmake_pop_check_state()
    

    然后,您必须将变量HAVE_CXX_11_REGEX包含在config.h中 . 然后你可以用 #ifdef HAVE_CXX_11_REGEX 来测试它 .

相关问题