如何在 Sublime Text 上构建 C++20 系统?

How to build a system for C++20 on Sublime Text?

我正在尝试 运行 c++20 使用 command + B 组合键,尚未成功。也试过加-std=gnu++20,没用。我该怎么做?


目前,我的系统使用 c++17,这里是配置构建系统:

{
    "cmd": ["g++", "-std=c++17", "-o", "${file_path}/${file_base_name}", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",
    "quiet": true,

    "variants": [
        {
            "name": "Run with C++20",
            "cmd": ["bash", "-c", "g++20 '${file}' -std=c++20 -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
        {
            "name": "Run with C++17",
            "cmd": ["bash", "-c", "g++ '${file}' -std=c++17 -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]

        },
        {
            "name": "Build without C++11",
            "cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
        },

        {
            "name": "Run",
            "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        }


    ]
}

基本测试:

#include <iostream>
#include <string_view>
#include <string>

template <typename PrefixType>
void test_prefix_print(const std::string& str, PrefixType prefix) {
    std::cout << '\'' << str << "' starts with '" << prefix << "': " <<
              str.starts_with(prefix) << '\n';
}

int main() {
    std::boolalpha(std::cout);
    auto helloWorld = std::string("hello world");

    test_prefix_print(helloWorld, std::string_view("hello"));

    test_prefix_print(helloWorld, std::string_view("goodbye"));

    test_prefix_print(helloWorld, 'h');

    test_prefix_print(helloWorld, 'x');
}

重要:

我已经安装了 gcc 10.2.0 并使用 brew 更新了。我想我必须在配置文件中指出这一点。我该怎么做?

参考:

C++20 Support in GCC

你打错了一个小字。可执行文件仍然是 g++,您只需添加 -std=c++20-std=c++2a-std=gnu++20,具体取决于您要利用哪个 features/extensions。因此,将构建系统中的相关行更改为:

"name": "Run with C++20",
"cmd": ["bash", "-c", "g++ '${file}' -std=c++2a -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
  • 感谢,问题解决

  • 我们也可以使用 GNU 扩展,这是我对 C++ 构建系统的最后更新:

{
    "cmd": ["g++", "-std=gnu++2a", "-o", "${file_path}/${file_base_name}", "${file}"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",
    "quiet": true,

    "variants": [
        {
            "name": "Run with C++20 (GNU)",
            "cmd": ["bash", "-c", "g++ '${file}' -std=gnu++2a -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
        {
            "name": "Run with C++20",
            "cmd": ["bash", "-c", "g++ '${file}' -std=++2a -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        },
        {
            "name": "Run with C++17",
            "cmd": ["bash", "-c", "g++ '${file}' -std=c++17 -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]

        },
        {
            "name": "Build without C++11",
            "cmd": ["g++ '${file}' -o '${file_path}/${file_base_name}'"]
        },

        {
            "name": "Run",
            "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        }
    ]
}