C ++ 98 в Visual Studio 2019 с использованием Clang в качестве внешнего интерфейса? - PullRequest
0 голосов
/ 09 марта 2019

Итак, я использую 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?

...