VSCode 的C++编译

2023-05-16

0. 参考文档

0.1. 官方参考

由于C++在不同平台上编译使用的编译器不同,所以我们先将官网针对不同平台的编译文档摘录出来,以便大家参考:

0.0.1. Linux平台使用GCC

参考: https://code.visualstudio.com/docs/cpp/config-linux

0.0.2. Windows平台

0.0.2.1. 在常规环境中使用MinGW

参考: https://code.visualstudio.com/docs/cpp/config-mingw

0.0.2.2. 在WSL里面使用GCC

参考: https://code.visualstudio.com/docs/cpp/config-wsl

0.0.3. Mac平台使用

参考: https://code.visualstudio.com/docs/cpp/config-clang-mac

1. 配置文件

一个很好的参考文档: https://www.zhihu.com/question/30315894/answer/154979413

2. c_cpp_properties.json

2.1. 自动生成该配置文件

使用快捷键ctrl+shift+P打开Command Palette,输入C++, C/C++: Edit configurations(JSON)
在这里插入图片描述

可以生成c_cpp_properties.json, 并自动进入该文件, 下面是Mac中生成的配置文件:

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "macFrameworkPath": [],
            "compilerPath": "/usr/local/bin/gcc-11",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "macos-gcc-x64"
        }
    ],
    "version": 4
}

2.2. 配置文件介绍

先看官网的介绍:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

官网的示例配置:

 {
  "env": {
    "myDefaultIncludePath": ["${workspaceFolder}", "${workspaceFolder}/include"],
    "myCompilerPath": "/usr/local/bin/gcc-7"
  },
  "configurations": [
    {
      "name": "Mac",
      "intelliSenseMode": "clang-x64",
      "includePath": ["${myDefaultIncludePath}", "/another/path"],
      "macFrameworkPath": ["/System/Library/Frameworks"],
      "defines": ["FOO", "BAR=100"],
      "forcedInclude": ["${workspaceFolder}/include/config.h"],
      "compilerPath": "/usr/bin/clang",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "/path/to/compile_commands.json",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
}

每个字段,官网已经有详细的介绍,我就不再摘录,只是根据自己的理解的介绍一下。
整个配置文件可以分成三大部分:

  • “env”: 用来配置各种环境变量(类似Linux的export了一大堆变量),这些环境变量不止在这个文件中可以使用,在其他的配置文件中也可以调用
  • “configurations”: 定义各种配置的细节(这部分是我们需要重点关注的)
  • “version”: 版本信息,不是很重要

2.2.1. 介绍“configurations”部分

  • name: 我们的配置文件可能有多个,所以每个配置文件都有一个友好的标识,也就是“name”字段,可以帮我们在其他地方选择到底我们需要的是那个配置文件
  • intelliSenseMode: 告诉VSCode当前配置想要模拟的目标架构和编译器,以便VSCode的C++的插件可以提供正确的IntelliSense,并反映pointer、size_t、long等数据类型的正确大小。通常,不同平台采用不同的值:
    • windows平台通常采用: msvc-x64
    • Linux平台通常采用: gcc-x64
    • Mac平台通常采用: clang-x64
  • compilerPath: 编译器路径, 在上面的例子中,我们使用了mac里面的clang编译器。 如果你自己的编译器在别的路径下,可以将这个配置改为对应的路径。当VSCode 知道在哪儿可以找到这些文件时候,它可以提供智能补全跳转定义、导航等功能。
  • compilerArgs: 【可选】编译器参数, 如果我们编译的时候需要增加参数,可以通过这个字段来进行设置
  • includePath: 制定需要搜索的头文件路径,注意, 在这些路径上搜索不是递归的。如果想要递归,可以在目录后加上“**”符号,以明确告知VSCode进行递归搜索。
    • 举例: ${workspaceFolder}/**将搜索${workspaceFolder}以及所有子目录。
    • 举例: ${workspaceFolder}/将搜索${workspaceFolder}目录,不会搜索子目录
  • forcedInclude: 【可选】在处理源文件中的任何其他字符之前应包含的文件列表。文件按列出的顺序包含。
  • cStandard: 使用的C标准
  • cppStandard: 使用的C++标准

3. 配置编译器

3.1. 自动扫描生成Cmake的工具链

打开命令面板(Ctrl+Shift+P), 输入“Cmake”, 选择【Cmake: Configure】.
这时候会弹出很多编译器选项,如果在这里面有需要的编译器,选择即可。如果没有,可以点击【[Scan for kits]】。
扫描的结果会存放在~/.local/share/CMakeTools目录下,通常这个目录下有两个文件:

  • cmake-tools-kits.json
  • log.txt

我们需要关注的是cmake-tools-kits.json文件,内容类似:

[
  {
    "name": "Clang 13.0.0 x86_64-apple-darwin21.3.0",
    "compilers": {
      "C": "/usr/bin/clang",
      "CXX": "/usr/bin/clang++"
    }
  },
  {
    "name": "Clang 13.1.6 x86_64-apple-darwin21.6.0",
    "compilers": {
      "C": "/usr/bin/clang",
      "CXX": "/usr/bin/clang++"
    }
  },
  {
    "name": "GCC 11.3.0 x86_64-apple-darwin21",
    "compilers": {
      "C": "/usr/local/bin/gcc-11",
      "CXX": "/usr/local/bin/g++-11"
    }
  }
]

这个文件的作用就是: 记录VSCode发现的当前系统中有哪些编译器可供使用

我测试的是Mac电脑,同时电脑里面安装了GCC,所以显示的结果如上所述。如果你的电脑是Linux或者Windows,那么结果应该不同, 但是结构肯定类似。

3.2. 处理交叉编译(cross-compiling)问题

如果你想要在X86架构的电脑上编译ARM的二进制文件,肯定会用到交叉编译器,但是交叉编译器的路径通过上面的方式一般不能扫描到,需要人工添加。

微软官方说明: https://code.visualstudio.com/docs/cpp/configure-intellisense-crosscompilation

3.2.1. 创建编译器配置文件

我自己使用的方法如下, 为了说明配置逻辑,现在假设:

  • 我的交叉编译工具链路径为: /usr/arch/arm/host/rk_toolchain/
  • 我想要将这个编译器工具链命名为: “rk_corss_compiler”

在上一步介绍的cmake-tools-kits.json文件中, 我们将交叉编译器按照Json格式添加到文件末尾(注意:必须添加到文件末尾), 具体配置如下:

{
    "name": "rk_corss_compiler",
    "toolchainFile": "/usr/arch/arm/host/rk_toolchain/toolchain.cmake"
}

最后面的toolchain.cmake文件,通过名称就可以看到是一个工具链的Cmake说明文件,这个文件是我们创建的(文件名称可以随便起,但是后缀最好写为cmake),在下面会有说明。

3.2.2. 介绍上面说的toolchain.cmake文件

这里有我使用的一个toolchain.cmake文件,内容如下:

### toolchain.cmake ###

# this is required
# The name of the operating system for which CMake is to build
SET(CMAKE_SYSTEM_NAME Linux)

SET(RK_TOOLCHAIN_ROOT /usr/arch/arm/host/rk_toolchain/)

# specify the cross compiler
SET(CMAKE_C_COMPILER ${RK_TOOLCHAIN_ROOT}/bin/aarch64-linux-gcc)
SET(CMAKE_CXX_COMPILER ${RK_TOOLCHAIN_ROOT}/bin/aarch64-linux-g++)

# where is the target environment
# CMAKE_FIND_ROOT_PATH: This variable is most useful when cross-compiling. 
SET(CMAKE_FIND_ROOT_PATH  ${RK_TOOLCHAIN_ROOT})

# search for programs in the build host directories (not necessary)
# detail URL: https://cmake.org/cmake/help/latest/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.html?highlight=cmake_find_root_path_mode_program
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

4. 任务(tasks)

参考文档: https://code.visualstudio.com/docs/editor/tasks

5. 遇到问题

5.1. 在mac中使用gcc编译报错,错误1

错误信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mu0HInpy-1667131708869)(media/16622608058838/16622906411086.png)]

解决办法:
导入环境变量:

export	CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

5.2. 在mac中使用gcc编译报错,ld错误

错误信息:

ld: library not found for -lSystem

解决办法:
编译的时候加入:

-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib

如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VSCode 的C++编译 的相关文章

  • Windows下VSCode开发及运行Web程序环境配置

    前言 本文主要介绍在Windows操作系统下如何配置Visual Studio Code VSCode 开发和运行调试网页 一 安装VSCode 1 下载Visual Studio Code 以下简称VSCode 安装文件 下载地址为 ht
  • Jupyter Error “bad file descriptor“ in VSCode

    Jupyter Error bad file descriptor in VSCode 直接跑这一行 pip install upgrade force reinstall no cache dir jupyter
  • react脚手架配置别名并自动提示[VSCode]

    1 安装三方库 craco craco yarn add craco dev npm install craco craco save dev 2 配置craco config js const path require path modu
  • Visual Studio Code 1.35更新:远程开发终于来啦

    前段时间大家可能看过一个新闻 微软为VSC开发一款名为Remote Development的扩展程序 可以让我们使用本地VSC开发和调试远程机器上的代码 这个功能对于我这个不会使用vim等linux工具的人来说 简直是一个重大消息 可惜的是
  • cpplint在VS Code中的安装及使用

    目录 前言 Python环境的配置 在VS Code中安装相应插件 补充 如何将VS Code默认的格式化风格改为Google风格 相关链接 前言 cpplint是一款Google的代码检查工具 确定一种编码风格对于我们有非常大的帮助 也可
  • VScode扩展商店不显示插件问题

    VScode扩展商店不显示插件问题 情况一 代理服务器异常 参考文章 https blog csdn net wodebokecsdn article details 89239769 文件 首选项 设置 应用程序 代理服务器 情况二 设备
  • vscode 中使用鼠标Ctrl+滚轮放大缩小

    1 使用鼠标Ctrl 滚轮放大缩小 打开 文件 gt 首选项 gt 设置 gt 用户 gt 下面的JSON 2 3 点击在settings json中编辑 4 添加下面一行 editor mouseWheelZoom true 5 最后保存
  • 使用vscode编辑和提交github仓库代码

    写在前面 在github上想删除仓库中的某个文件或文件夹 亦或是重命名操作都很麻烦 这里提供一种vscode的解决方案 在vscode中克隆远程github仓库 然后对代码或文件进行编辑 最后提交即可 就和管理本地文件一样方便 准备工作 下
  • vscode实现文件单步调试保姆级教程

    第一步 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 点击终端 gt 配置任务 第十一步 第十二步 第十三步 第十四步 设置完毕 可以在源程序打断点按F5执行了
  • [VScode]终端回应“pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。“解决思路

    问题概述 遇到问题 在VScode终端输入pnpm install有错误提示 pnpm 无法将 pnpm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如 果包括路径 请确保路径正确 然后再试一次 所在位置 行
  • 企业微信登录-前端实现

    企业微信登录 企业微信登录 前端具体实现 下面代码中配置项的字段具体用途说明可以阅读企业微信开发者说明文档 我们通过提供的企业微信登录组件来进行站内登录 下面是我封装的登录组件以及使用方法 weChatLogin vue 封装的组件
  • VSCode中配置命令行参数

    VSCode中配置命令行参数 在跑程序调试的时候 可以直接使用脚本运行程序 这个时候调试代码只能用pdb 我觉得不太习惯 而且感觉不是很好 所以想这能不能将运行程序的脚本中的命令直接配置到vscode上 就有了这篇记录 正常vscode D
  • VSCode搭建ARM(STM32开发环境)

    目录 需要用到的工具 软件安装 下载安装 Visual Studio Code 下载安装 STM32Cubemx 下载安装 ARM GCC交叉编译工具链 下载安装 Msys2 下载安装 OpenOCD 下载安装 Make 开发环境配置 ms
  • settings.json是什么?VS Code的“用户”和“工作区”

    setting json settings json是VS Code众多配置文件中的一个 可以对VS Code进行页面风格 代码格式 字体颜色大小等的编辑设置 比如可能编辑器默认的一个tab为4个空格 用户可以在setting json里面
  • Python in Visual Studio Code 2023年9月更新

    作者 Courtney Webster Program Manager Python Extension in Visual Studio Code 排版 Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Py
  • vscode调试mit6s081Lab

    环境 mit6 s081的实验环境 gdb multiarch 用于gdb调试 vscode调试实质上就是提供个图形化页面 底层还是这个 安装 gdb multiarch sudo apt get install gdb multiarch
  • VSCode中如何查看EDI报文?

    VSCode是开发人员常用的一款软件 为了降低EDI报文的阅读门槛 知行的开发人员设计了EDI插件 可以在VSCode中下载使用 如何打开一个EDI报文 VSCode EDI插件介绍 EDI插件下载流程 进入VSCode 打开Extensi
  • 人工智能计算机视觉:解析现状与未来趋势

    导言 随着人工智能的迅速发展 计算机视觉技术逐渐成为引领创新的关键领域 本文将深入探讨人工智能在计算机视觉方面的最新进展 关键挑战以及未来可能的趋势 1 简介 计算机视觉是人工智能的一个重要分支 其目标是使机器具备类似于人类视觉的能力 这一
  • VSCode 代码高亮 变量类型、函数名、类名没有颜色 - 设置主题即可

    https zhuanlan zhihu com p 630401039 之前应该设置主题了 但不知道为啥C 里面只有 int 有高亮 其他像 cv Mat 函数名 类名都没有颜色 解决方案是重新设置一下主题 File preference
  • vscode插件离线安装地址

    因内网开发 编辑器不可联网 插件需要离线安装 vscode插件商店 Extensions for Visual Studio family of products Visual Studio Marketplace

随机推荐

  • NFT和数字藏品的区别

    来源 xff1a 德勤 Web3 0模式分析及中国应用创新探索
  • Pycharm 增加 run 控制台缓冲行数

    找到 pycharm 安装目录的 bin 目录下 idea properties 文件 xff0c 修改 idea cycle buffer 值 xff0c 原来默认为 1024
  • python 类的定义一定要注意静态变量

    class A 静态变量 a 61 12 def init self a 成员变量 self a 61 a 静态变量通过 类名 变量名 来访问 print A a 12 成员变量通过 对象 变量名 访问的 print A 0 a 0 cla
  • python open按行读取txt 去掉\n

    加 strip 39 n 39
  • OOQP安装指南

    文章目录 1 OOQP的github链接 xff1a 2 准备工作 xff1a 3 安装OOQP xff1a 4 简单使用 xff1a 1 OOQP的github链接 xff1a ompl的官网网址为 xff1a https github
  • 海康摄像头实时显示与字符叠加详解

    1 说明 文章详细叙述了海康摄像头的两种实时显示方法 基于SDK 解码显示和基于数据流回调显示 xff0c 并且讲述了这在两种显示方法下如何往画面添加字符和图像 xff0c 最后比较了这两种方法的优劣 文章全程给以详细的程序说明 xff0c
  • Proto3序列化协议

    Proto3序列化协议 简介 对于互联网应用来说 xff0c 客户端 客户端 客户端 服务端之间需要数据的交互 xff0c 其数据传输是二进制流的方式在互联网上传输 xff0c 因为需要一种手段将数据对象编码为一种可以在网络上传输的二进制流
  • 一文读懂数据库分库分表

    阅读此文你将了解 xff1a 什么是分库分表以及为什么分库分表如何分库分表分库分表常见几种方式以及优缺点如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说 xff0c 绕不开数据库的使用与方案选型 xff0c 那么随着业务规模的
  • 从操作系统漫谈GOLang GPM模型

    前言 本文从操作系统谈起 xff0c 简单介绍操作系统基本知识 xff0c 引出进程 线程调度的基本原理和基本模型 xff0c 然后从0到1设计Golang调度器 xff0c 通过方案的逐步演进升级 xff0c 可以了解到GPM模型设计理念
  • 卡尔曼滤波经典讲解,C++算法实现

    请移步跳转文章排版更加清晰 在学习卡尔曼滤波器之前 xff0c 首先看看为什么叫 卡尔曼 跟其他著名的理论 xff08 例如傅立叶变换 xff0c 泰勒级数等等 xff09 一样 xff0c 卡尔曼也是一个人的名字 xff0c 而跟他们不同
  • 解决linux不能安装g++问题

    问题描述 xff1a Ubuntu如何通过重新安装G 43 43 编译器 xff0c 修复不能安装使用g 43 43 的问题 我刚安装的Ubuntu 14 10的g 43 43 编译器不能使用 xff0c 用sudo apt get ins
  • MySQL系列之源码浅析

    源码才是王道 真正的高手从来不是临场发挥 xff0c 随机应变是外人看来的错觉 1 主函数sql mysqld cc中 xff0c 代码如下 xff1a span class hljs keyword int span main span
  • 卡尔曼算法精讲与C++实现

    在学习卡尔曼滤波器之前 xff0c 首先看看为什么叫 卡尔曼 跟其他著名的理论 xff08 例如傅立叶变换 xff0c 泰勒级数等等 xff09 一样 xff0c 卡尔曼也是一个人的名字 xff0c 而跟他们不同的是 xff0c 他是个现代
  • 腾讯后端面试经验

    终于等来腾讯的面试 4 3号 机试 机试包括选择 xff08 30多 xff09 简答 xff08 2题 xff09 编程 xff08 2 xff09 选择和简答编程分别一小时 xff0c 选择题考的比较广 xff0c 概率 Linux 操
  • Springboot整合摘要式(Digest)身份认证

    百度下来关于springboot整合摘要式省份认证的帖子基本都是说原理的 xff0c 很少有直接的demo xff0c 前些天找到了一个博主写的demo xff0c 但是我只是截图了忘记了博主的地址很抱歉了 下面直接上代码截图 xff1a
  • kalibr相机内参标定优化过程和原理

    在估计出内参之后 xff0c 会进行优化迭代操作 如果是多相机标定 xff0c 在完成内参标定的同时 xff0c 也会完成具有交叉视野相机外参的的标定 初始估计步骤也会进行多相机基线距离的估计 xff0c 用作后续的迭代优化 优化过程如下
  • Curl多线程并发任务实例函数

    function curl post3 url arrs flen for i 61 0 i lt flen i 43 43 foreach arrs i as k 61 gt v tmp str 61 k 34 61 34 v 34 am
  • Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

    csdn越改版 xff0c 越丑 开始我们的主题 xff1a Linux下原子操作 xff08 信号量 自旋锁 xff09 的实现原理和底层代码分析 2017年8月27日12 47 02 1 何为原子操作 xff1f 原子操作是什么 xff
  • Linux下用c语言实现发送http请求

    前言 在linux下 xff0c 使用socket进行编程 xff0c 需要到服务器上进行获取数据 xff0c 服务器使用的php编程 xff0c 需要使用http的方式进行获取数据 代码 span class hljs preproces
  • VSCode 的C++编译

    0 参考文档 0 1 官方参考 由于C 43 43 在不同平台上编译使用的编译器不同 xff0c 所以我们先将官网针对不同平台的编译文档摘录出来 xff0c 以便大家参考 xff1a 0 0 1 Linux平台使用GCC 参考 xff1a