运行 cmake 时如何将 gcc 替换为 g++-11 到 C++20

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

规格:

  • WSL,ubuntu 22.04
  • cmake 版本 3.25.2
  • g++版本:11.4.0
  • 海湾合作委员会版本:11.4.0

我正在做斯坦福大学 2023 年春季 CS144 的 lab0,当时我一开始就陷入了困境。当我运行

cmake --build build
时,我收到以下错误消息:

 error: invalid return type ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} of ‘constexpr’ function ‘static constexpr std::string ExpectationViolation::boolstr(bool)’
   16 |   static constexpr std::string boolstr( bool b ) { return b ? "true" : "false"; }

我在网上发现这是因为

constexpr std::string
是在C++ 20中引入的,而我的wsl上有gcc-11和g++-11,而gcc-11只支持C++ 20的一些实验性功能。所以我打算将Cmake的默认编译器设置为g++。但是,我不断收到相同的错误消息。

我尝试安装 g++-12:

lrwxrwxrwx 1 root root 21 Sep 27 21:24 /usr/bin/g++ -> /etc/alternatives/g++*
lrwxrwxrwx 1 root root 23 May 13 15:52 /usr/bin/g++-11 -> x86_64-linux-gnu-g++-11*
lrwxrwxrwx 1 root root 23 May 13 15:33 /usr/bin/g++-12 -> x86_64-linux-gnu-g++-12*
 
lrwxrwxrwx 1 root root 21 Sep 27 21:46 /usr/bin/gcc -> /etc/alternatives/gcc*
lrwxrwxrwx 1 root root 23 May 13 15:52 /usr/bin/gcc-11 -> x86_64-linux-gnu-gcc-11*
lrwxrwxrwx 1 root root 23 May 13 15:33 /usr/bin/gcc-12 -> x86_64-linux-gnu-gcc-12*
lrwxrwxrwx 1 root root  9 Aug  5  2021 /usr/bin/gcc-ar -> gcc-ar-11*
lrwxrwxrwx 1 root root 26 May 13 15:52 /usr/bin/gcc-ar-11 -> x86_64-linux-gnu-gcc-ar-11*
lrwxrwxrwx 1 root root 26 May 13 15:33 /usr/bin/gcc-ar-12 -> x86_64-linux-gnu-gcc-ar-12*
lrwxrwxrwx 1 root root  9 Aug  5  2021 /usr/bin/gcc-nm -> gcc-nm-11*
lrwxrwxrwx 1 root root 26 May 13 15:52 /usr/bin/gcc-nm-11 -> x86_64-linux-gnu-gcc-nm-11*
lrwxrwxrwx 1 root root 26 May 13 15:33 /usr/bin/gcc-nm-...

这不起作用。然后我尝试建立一个软链接:

sudo update-alternatives --config gcc
There is only one alternative in link group gcc (providing /usr/bin/gcc): /usr/bin/g++-11
Nothing to configure.

sudo update-alternatives --config g++
There is only one alternative in link group g++ (providing /usr/bin/g++): /usr/bin/g++-11
Nothing to configure.

还是不行。我现在一无所知。

gcc networking cmake g++ windows-subsystem-for-linux
2个回答
0
投票

gcc/g++ 是编译器,11.4.0 是编译器的版本而不是语言的版本

c++ 20 是一个 C++ 标准

两者是不同的

您需要更改 cmake (CMakeLists.txt) 以使用不同的 C++ 标准 像这样的:

set(CMAKE_CXX_STANDARD 20)

或者不使用这些功能


0
投票

让 CMake 使用另一个 C++ 编译器的快速方法是设置

CXX
环境变量:

export CXX=/usr/bin/g++-12
cmake -S . -B build

正如 CMake 文档 所解释的,结果被缓存,因此您需要在应用更改之前删除

CMakeCache.txt
(或整个构建目录)。

顺便说一句,要设置 C 编译器,请使用

CC
环境变量。

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