我有一个使用std :: regex的应用程序,它在我的计算机上构建并运行良好。但是,在ubuntu 14.04上,它构建但不起作用,因为std :: regex没有在旧的libstdc ++上实现。
我想#ifdef我的代码中的一些行来解决这个问题,但似乎找到了一种可靠的方法来判断libstdc ++是否支持它。
我正在使用cmake,所以如果我能够获得该库的版本,我也会很高兴(/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 - > 6019)
答案 0 :(得分:3)
您可以编写一个简单的测试来检查它是否有效。首先是CMake部分:
{
"from": 20,
"size": 10,
"query": {
"bool": {
"must": [
{
"term": {
"FIELD": {
"value": "VALUE"
}
}
}
]
}
}
}
然后你必须将变量HAVE_CXX_11_REGEX包含在config.h中。然后,您可以使用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()
进行测试。