C ++ 11 CMake: Regex не работает

Я столкнулся с проблемой, что gcc / g ++ <= 4.8.X не поддерживает RegEx (моя первая реакция была: ЧТО ?!).

После установки (Ubuntu 14.04 LTS) gcc-4.9 и g ++ — 4.9 (которые должны должным образом поддерживать RegEx) я по-прежнему получаю ту же ошибку:

terminate called after throwing an instance of 'std::regex_error'
what():  regex_error
[1]    13608 abort (core dumped)

мой CMakeLists.txt выглядит так (работа с Jetbrains CLion в качестве IDE):

set(CMAKE_CXX_COMPILER g++-4.9)

cmake_minimum_required(VERSION 3.1)

project(project1)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

add_executable(project1 ${SOURCE_FILES})

мой код выглядит так:

#include <iostream>
#include <string>
#include <fstream>
#include <regex>

using namespace std;

(...)

char encryptChar(char cinput)
{
std::string s = std::string(1, cinput);
// simplified regex (also crashes)
std::regex e = std::regex("[a-z]");

if(std::regex_match(s, e))
{
// do some stuff, if string matches conditions
}

return cinput;
}

Компилятор / Линкер не жалуются ни на что. Программа работает нормально без регулярных выражений.

> g++-4.9 --version
>>> g++-4.9 (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
>>> Copyright (C) 2014 Free Software Foundation, Inc.

РЕДАКТИРОВАТЬ: После ручной компиляции кода с g++-4.9 -std=c++11 main.cpp регулярное выражение работает. Почему не работает версия IDE / CMake?

3

Решение

Наконец я нашел проблему:

Моя версия CMake была 2.8-иш, так что сам CMake вышел из строя, Jetbrains CLion использует пользовательский CMake (поставляется с IDE), который является каким-то 3.1-ишным, но также потерпел неудачу с RegEx.

Я загрузил CMake 3.2.2 (новейшая версия) и установил его (примечания по установке). Теперь компиляция с CMake правильно использует g ++ — 4.9, и RegEx работает нормально. В CLion мне пришлось изменить настройки, чтобы игнорировать пользовательский CMake и использовать мои системы CMake 3.2.2, теперь компиляция с помощью IDE тоже правильно использует g ++ — 4.9, и RegEx работает нормально.

2

Другие решения


По вопросам рекламы [email protected]