Есть ли функция компиляции cmake для charconv в c ++ 17? - PullRequest
1 голос
/ 26 апреля 2020

Я написал некоторый код, который использует c ++ 17 charconv , который я могу прекрасно скомпилировать с помощью g ++ 9. Даже если я установил std в c ++ 17 в моем CMakeLists.txt , cmake настаивает на использовании c ++ 7.5, который не поддерживает charconv.

Как мне сказать cmake, что мне нужен компилятор, который поддерживает charconv? Я не вижу переключателя в CMAKE_CXX_KNOWN_FEATURES.

Вот мой CMakeLists.txt

cmake_minimum_required(VERSION 3.17)

file(GLOB CLIENT_SRC "srcs/*.cpp")
include_directories("includes")

add_executable(client ${CLIENT_SRC})

set_target_properties(client PROPERTIES OUTPUT_NAME "distff-client")

target_compile_features(client PUBLIC cxx_std_17 )

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Не парень cmake ... и я не совсем понимаю подход cmake к компиляции функций здесь. Но в целом в C ++ мы теперь используем макросы тестирования функций для обнаружения наличия функций. Вы ищете специально для __cpp_lib_to_chars.

Я думаю, что вы хотите требовать компиляции этой программы:

#if __has_include(<version>)
#  include <version>
#elif __has_include(<charconv>)
#  include <charconv>
#else
#  error "neither <version> nor <charconv> available to test"
#endif

#ifndef __cpp_lib_to_chars
#  error "tochars not implemented"
#endif

Что может быть обобщено на что-то, что вы может configure_file() для произвольной библиотечной функции (просто вытащите имя заголовка и имя макроса и, возможно, также проверьте, имеет ли макрос минимальное требуемое значение).

В любом случае, если вы try_compile() получите исходный файл, вы, вероятно, получите желаемое поведение?

0 голосов
/ 26 апреля 2020

Не эксперт CMAKE, но проще всего было бы установить переменную окружения CXX . Вот так:

export CXX="/usr/bin/x86_64-linux-gnu-g++-9"

подробнее на Как указать компилятор в CMake?

...