ошибка: нет типа с именем 'invoke_result_t' в пространстве имен 'std' gcc-7 - PullRequest
0 голосов
/ 28 апреля 2018

Мой файл cmake:

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_COMPILER "gcc-7")


project(invertedindex)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -O0")

set(SOURCE_FILES main.cpp inverted_index.hpp params.hpp)
add_executable(invertedindex ${SOURCE_FILES})

К счастью, я посмотрел на сгенерированную команду компилятора

/usr/local/bin/gcc-7    -Wall -Wextra -Wconversion -O0   -std=gnu++1z -o CMakeFiles/invertedindex.dir/main.cpp.o -c /Users/adam/school/cpp/invertedindex/main.cpp

и пила -std=gnu++1z. Мне не интересно изучать долгие часы, что это за хрень и почему она там, когда у меня

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Он подозревает, что -std = gnu ++ 1z не является стабильной, законченной библиотекой или sth. Но gcc 7 поддерживает большинство функций стандарта c ++ 17.

Когда я понял, что он должен работать, я вручную заменил сгенерированный параметр команды на -std=gnu++17, и он заработал. В чем дело? Как мне заставить это работать в cmake?

1 Ответ

0 голосов
/ 28 апреля 2018

См. , как указать компилятор в cmake Я использовал третий метод, который отмечен как избегать. Первый метод, это установка CXX env var, не работал (компилятор был немного Mac g ++). Поэтому я попробовал второй способ - указать компилятор в cmake args -D CMAKE_C_COMPILER=gcc-7, который сработал. Даже при генерации c ++ 1z param. Я не понимаю этого, но пока я не сломаюсь, у меня все хорошо.

/usr/local/bin/gcc-7    -Wall -Wextra -Wconversion -O0 -g   -std=gnu++1z -o CMakeFiles/invertedindex.dir/main.cpp.o -c /Users/adam/school/cpp/invertedindex/main.cpp
...