如何强制 CLion 使用自定义 MSVC 版本?

问题描述 投票:0回答:1

问题

我使用 CLion 2022.2、Visual Studio 2022 和 CMake 3.23。我想使用版本 14.31.17.1 的工具集,该版本比最新版本旧。

配置

我使用

CMakeLists.txt
文件配置 CMake 项目

project(test_project)
add_executable(test_project main.cpp)

在 CLion 中,我指定生成器 Visual Studio 2022 和工具集 14.31.17.1。执行的命令是

"C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 17 2022" -T version=14.31.17.1 -S F:\test_project -B F:\test_project\build

尽管如此,日志说

-- The C compiler identification is MSVC 19.33.31629.0
-- The CXX compiler identification is MSVC 19.33.31629.0

当我清除缓存目录并在 CLion 终端中执行相同的命令(使用

.
&
前缀复制并粘贴)时,我得到了我想要的

-- The C compiler identification is MSVC 19.31.31107.0
-- The CXX compiler identification is MSVC 19.31.31107.0

注意:工具集 14.31.31103 包含 MSVC 19.31.31107.0,而工具集 14.33.31629 包含 MSVC 19.33.31629.0。所以我断定出了问题。

此后,我可以修改项目并执行“重新加载CMake项目”,CLion做得很好,因为编译器的版本已经配置好了。

为工具链指定 C 和 C++ 编译器(文件 | 设置 | 构建、执行、部署 | 工具链)没有帮助。

当我使用 Visual Studio 安装程序删除最新的工具集时,它还会自动删除适用于 Windows 的 C++ CMake 工具,这不允许我将 CMake 与 Visual Studio 一起使用。

构建

我的

main.cpp
文件是

#include <iostream>

int main() {
    std::cout << _MSC_VER << std::endl;
    return 0;
}

当我配置项目(无论使用 CLion 还是手动)并使用 CLion GUI 构建它时,我得到了答案

1933

虽然,如果我使用与 CLion 相同的命令,即

"C:\Program Files\CMake\bin\cmake.exe" --build F:\test_project\build --target test_project --config Debug

我得到了我需要的东西

1931

奇怪的是,即使在使用 CLion GUI 配置项目后,我也使用终端得到了正确的结果。另外,我可以在终端中设置项目以使用较新的工具集(这是默认设置)并打印

1933

此外,当我使用 CLion 调试代码时,Evaluate 表示

_MSC_VER
1933
,但应用程序仍然打印
1931
。当我创建变量
int x{_MSC_VER};
时,调试器显示
x
等于
1931

总结

如果我使用 CLion GUI 来配置或构建项目或同时执行这两项操作,则它使用 MSVC 19.33.31629.0。 如果我使用 CLion 在配置和构建项目时向我显示的相同命令在 CLion 的终端中配置和构建项目,我可以使用 MSVC 19.31.31107.0。

我错过了什么吗? CLion 是否指定了我应该覆盖的环境变量?是否可以使用 CLion 选择我需要的 MSVC 版本?

c++ visual-studio cmake clion
1个回答
0
投票

这主要不是我的环境的问题,而是 CLion 本身的问题: https://youtrack.jetbrains.com/issue/CPP-30223

以下解决方法完成了这项工作:创建一个自定义编译器并设置 YAML 配置文件,指定必要的宏、编译器路径、包含目录(包括正确的标准库):

compilers:
  - description: MSVC 14.31.31103
    match-sources: ".*\\.cpp"
    match-language: CPP
    match-compiler-exe: ".*/MSVC/14.31.31103/bin/HostX64/x64/cl.exe"
    include-dirs:
      - ${compiler-exe-dir}/../../../include
      - C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
    defines:
      __cplusplus: 202002L

注:

不同的库可能需要设置更多定义,但您可以从默认的 Visual Studio 工具链中获取它们。

© www.soinside.com 2019 - 2024. All rights reserved.