在Visual Studio中使用CMake设置Clang-CL

pepwfjgg  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(201)

我试图在Visual Studio上设置Clang-CL。我需要它,因为我以前在MinGW上使用C23功能,但MinGW在Windows上提供的调试功能无法使用,当我需要它们时根本没有帮助。当我选择Clang-CL工具包后尝试使用CMakeLists.txt文件设置它时,我得到了这个错误:x1c 0d1x

  1. Severity Code Description Project File Line Suppression State Details
  2. Error CMake Error at C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/Platform/Windows-Clang.cmake:170 (message):
  3. The current configuration mixes Clang and MSVC or some other CL compatible
  4. compiler tool. This is not supported. Use either clang or MSVC as both C,
  5. C++ and/or HIP compilers. C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/Platform/Windows-Clang.cmake 170

字符串
下面是我的CMakeLists.txt和CMakeSettings.json:

  1. cmake_minimum_required(VERSION 3.21)
  2. include(FetchContent)
  3. find_package(OpenGL REQUIRED)
  4. #- GLFW ---------------------------------------------------------------------
  5. FetchContent_Declare(
  6. glfw
  7. GIT_REPOSITORY https://github.com/glfw/glfw
  8. GIT_TAG 3.3.8
  9. GIT_SHALLOW TRUE
  10. GIT_PROGRESS TRUE
  11. )
  12. set(GLFW_BUILD_TESTS OFF CACHE BOOL "")
  13. set(GLFW_BUILD_DOCS OFF CACHE BOOL "")
  14. set(GLFW_INSTALL OFF CACHE BOOL "")
  15. set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "")
  16. FetchContent_MakeAvailable(glfw)
  17. #- GLAD ---------------------------------------------------------------------
  18. FetchContent_Declare(
  19. glew
  20. GIT_REPOSITORY https://github.com/Perlmint/glew-cmake.git
  21. GIT_TAG origin/master
  22. )
  23. FetchContent_GetProperties(glew)
  24. if(NOT glew_POPULATED)
  25. FetchContent_Populate(glew)
  26. add_subdirectory(${glew_SOURCE_DIR} ${glew_BINARY_DIR} EXCLUDE_FROM_ALL)
  27. endif()
  28. #- STB ---------------------------------------------------------------------
  29. FetchContent_Declare(
  30. stb
  31. GIT_REPOSITORY https://github.com/nothings/stb.git
  32. GIT_TAG master
  33. GIT_SHALLOW TRUE
  34. GIT_PROGRESS TRUE
  35. )
  36. FetchContent_GetProperties(stb)
  37. if(NOT stb_POPULATED)
  38. FetchContent_Populate(stb)
  39. message("Fetching stb")
  40. add_library(stb_image INTERFACE ${stb_SOURCE_DIR}/stb_image.h)
  41. target_include_directories(stb INTERFACE ${stb_SOURCE_DIR})
  42. endif()
  43. #- FREETYPE -----------------------------------------------------------------
  44. FetchContent_Declare(
  45. freetype
  46. GIT_REPOSITORY https://github.com/aseprite/freetype2.git
  47. GIT_TAG VER-2-6-3
  48. )
  49. FetchContent_GetProperties(freetype)
  50. if(NOT freetype_POPULATED)
  51. FetchContent_Populate(freetype)
  52. add_subdirectory(${freetype_SOURCE_DIR} ${freetype_BINARY_DIR})
  53. endif()
  54. # --------------------
  55. project(2dgfx C)
  56. set(CMAKE_C_STANDARD 23)
  57. # set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
  58. if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  59. set(CMAKE_EXE_LINKER_FLAGS /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib)
  60. endif()
  61. include_directories(. ./deps/include ./lib)
  62. link_directories(./deps/lib)
  63. # link_libraries(freetype.lib glew32s.lib shell32.lib Gdi32.lib user32.lib opengl32.lib glfw3.lib)
  64. add_executable(graphics
  65. deps/hash.c
  66. deps/hashfunc.c
  67. deps/vec.c
  68. lib/2dgfx.c
  69. main.c)
  70. target_link_libraries(graphics PRIVATE glfw libglew_static stb_image)
  1. {
  2. "configurations": [
  3. {
  4. "name": "x64-Debug",
  5. "generator": "Ninja",
  6. "configurationType": "Debug",
  7. "inheritEnvironments": [ "clang_cl_x64" ],
  8. "buildRoot": "${projectDir}\\out\\build\\${name}",
  9. "installRoot": "${projectDir}\\out\\install\\${name}",
  10. "cmakeCommandArgs": "",
  11. "buildCommandArgs": "",
  12. "ctestCommandArgs": "",
  13. "intelliSenseMode": "windows-clang-x64"
  14. }
  15. ]
  16. }

的数据
我试着清理目录,把工具箱换成别的东西,删除该高速缓存,还有其他很多事情,花了好几个小时,都没有用。

xwbd5t1u

xwbd5t1u1#

我将CMAKE_C_COMPILER作为clang-cl,将CMAKE_CXX_COMPILER作为clang++。将后者更改为clang-cl解决了这个问题。这很奇怪,因为这意味着Visual Studio附带的工具包默认情况下会损坏。

相关问题