Итак, я использую clang в качестве интерфейса для Visual Studio 2019 и cmake.
Также я хочу построить свой проект с использованием стандарта c ++ 98, я думал, что clang может это позволить, но, похоже, не может или может? Может быть, есть флаги или что-то еще?
Итак, мой CMakeLists.txt:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
project(sink)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Xclang -std=c++98 -Xclang -pedantic")
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BUILD_DIR}/bin")
file(GLOB SOURCES "${SRC_DIR}/*.cpp" "${SRC_DIR}/*.cc" "${SRC_DIR}/*.c")
file(GLOB HEADERS "${INCLUDE_DIR}/*.h" "${INCLUDE_DIR}/*.hpp")
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
И CMakeSettings.json :
{
"configurations": [
{
"name": "Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-DCMAKE_CXX_COMPILER:PATH=\"C:\\Program Files\\LLVM\\bin\\clang-cl.exe\" -DCMAKE_CXX_FLAGS:STRING=\"/DWIN32 /D_WINDOWS /GR /EHsc\" -DCMAKE_CXX_FLAGS_DEBUG:STRING=\"/MDd /Zi /Ob0 /Od /RTC1\"",
"buildCommandArgs": "-v",
"ctestCommandArgs": "",
"variables": []
}
]
}
Так что здесь у меня было много ошибок, таких как:
In file included from C:\PROGRA~1\LLVM\lib\clang\7.0.1\include\vadefs.h:32:
E:\VS19\VC\Tools\MSVC\14.20.27404\include\vadefs.h(151,27): error : expected parameter declarator
static_assert(!__vcrt_va_list_is_reference<_Ty>::__the_value,
^
E:\VS19\VC\Tools\MSVC\14.20.27404\include\vadefs.h(151,27): error : expected ')'
E:\VS19\VC\Tools\MSVC\14.20.27404\include\vadefs.h(151,26): note: to match this '('
static_assert(!__vcrt_va_list_is_reference<_Ty>::__the_value,
^
E:\VS19\VC\Tools\MSVC\14.20.27404\include\vadefs.h(151,13): error : C++ requires a type specifier for all declarations
static_assert(!__vcrt_va_list_is_reference<_Ty>::__the_value,
Но я думаю, что это ожидаемо, потому что в c ++ 98 не было type_traits и т. Д.
Итак, есть только один способ заменить компилятор msvc на более старую версию или что-то еще можно сделать? И есть ли способ собрать c ++ 98 на Windows, но без использования MINGW?