VSCode 的C++编译

article/2025/10/5 23:02:43

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

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


http://chatgpt.dhexx.cn/article/XCUafQGS.shtml

相关文章

关于vs编译器的一些认识

.vcproject 后缀 是一个项目里面的一个单独的子解决方案,相当于一个小模块 .sln 后缀 是整个项目的启动点 菜单里面的生成:相当于linux的编译 如图所示 输出目录 :就是生成(编译)后的 exe文件或者 dll文件,lib文件所在的目录 目标文件名:就是编译后的文件名字 目标文件…

C语言编辑器的使用(VS)

选择编辑器 编辑器介绍VS的使用 编辑器介绍 1,什么是编辑器(即开发环境) 所谓的开发环境就是指一个基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发,维护而使用的一组软件。 2,Visual S…

Visual Studio Code编译运行C/C++程序

参考网站:https://www.cnblogs.com/TAMING/p/8560253.html 使用code runner 插件 code runner插件默认的c/c编译器是gcc/g,需要提前安装好并且设置好环境变量,通常选择MinGW或者MinGW-w64,建议选mingw-w64 安装好并且设置好二者中的一个,并…

vs code如何编译C语言?

vs code 编译C/C语言 C/C语言 文章目录 vs code 编译C/C语言安装 Vs Code安装 C/C扩展安装 Mingw-w64配置环境变量检查 Min GW是否安装成功使用Hello World如何编译多个c文件代码?如何修改默认编译文件名?如何编译 .o 文件?如何输出.txt文件&#xff1f…

VS Code编译C/C++

C/C环境的配置要比python的复杂许多,好几个配置文件要写。 一、编译C/C的环境一般都是集成在我们的编辑器中的,如果电脑上有codeblock和dev c的读者可以去安装路径下找找MinGW文件夹,可以不用重复下载。而没有的读者则需要下载MinGW 二、配置…

使用VS Code 编译运行C/C++程序

文章目录 安装C/C编译器验证C/C开发环境安装插件 创建C文件运行C文件 调试创建tasks.json文件构建C文件创建launch.json文件调试C文件 总结 安装C/C编译器 macOS与主流的发行版Linux系统都自带了C/C编译器(gcc和g),而对于Windows,我们需要通过Mingw-w64…

【C++】各版本标准与gcc、vs编译器对应关系

c常用的编译场景一般是linux或windows,linux通常使用Mingw中的gcc/g编译器,Windows通常使用visual studio IDE中的微软编译器,随着c11及以上标准的普及,再编译器遇到这些新特性的时候,如果编译器版本过低,那…

Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

前言 最近想要切换编辑工具,之前工作中使用过 Source Insight,Eclipse,CLion 来写 C 代码。目前来说 Source Insight 已经非常古老,只有编写代码还说得过去,编译、调试方面都不行。Eclipse 使用的时间最长,…

你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧

你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧😎 前言🙌1. 什么是bug?🙌2. 调试是什么?有多重要?🙌2.1 调试是什么?2.2 调试的基本步骤…

c/c++ ------visualstudio编译器的使用

一个编译器而已 visualstudio是一个编译器而已(简称vs) 可视化的代码编译器;可视化的代码编辑器;方便的代码调试器;做好了windows操作系统拥有的库文件接口; 养成一个好的习惯: 编译目录;源码目录&#xff…

VS编译器的简单操作

目录 c语言的百度定义​ vs编译器的简单使用 第一个代码 什么是main函数 当运行结果一闪而过怎么办 c语言的百度定义 vs编译器的简单使用 要写一个代码首先要创建一个新项目,点击创建一个新项目,然后就有这样一个画面 语言选择c,选择空项目…

编译器的差别gcc和VS

问题的由来是我写了一个排序算法程序&#xff0c;在gcc编译器下运行&#xff0c;发现结果有问题&#xff0c;然后开展的寻找错误解决问题 这是我写的一个简单的插入排序算法 #include <stdio.h>//直接插入法排序函数主体 //参数1&#xff1a;待排序的序列 //参数2&…

Visual Studio编译器使用总结

经历过各种坑。安装坑&#xff0c;使用坑&#xff0c;配置坑。 今天抽空把总结写一下。 下面例子为vs2015举例。 大部分公司因为时间的问题&#xff0c;基本项目都是从vs2015版本进行开发的。后续为了统一&#xff0c;也建议大家用vs2015创建工程。 一、安装篇 vs2017-19版本…

c语言的编译器vs2019的安装及简单实用

1.编译器的介绍与安装 刚开始学习c语言呢&#xff0c;少不了的就是对语言编辑和编译。简单来说&#xff0c;我们就是需要一个编译器来编辑和运行你的代码。 那么有什么好的编译器值得推荐呢&#xff1f;那就有很多了。但是比较广泛使用的编译器有Clang、GCC、MSVC、devc。这里我…

VS编译器常见的问题

VS编译器常见的问题 前言问题一——VS2013控制台一闪而过解决方法1解决方法2 问题二——scanf函数报错解决方法 问题三——新建多个源文件引起的报错解决方法1解决方法2 前言 我们在开始学习C语言时&#xff0c;会遇到各种编译器&#xff0c;VS&#xff0c;Dev-C&#xff0c;V…

linux如何对mysql进行定时备份并定时清理3天之前的备份数据

linux如何对mysql进行定时备份并定时清理3天之前的备份数据 一.Linux对mysql进行定时备份 1.确保Linux上是否已经安装了mysql以及crontab 安装mysql可参考:https://blog.csdn.net/m0_51285952/article/details/123371653 安装crontab可参考:https://blog.csdn.net/hukai0q/…

docker定时备份mysql-定时备份docker中mysql的数据

一、概念 方法一&#xff1a;备份是通过如下命令实现 docker exec -it mysql&#xff08;镜像号&#xff09; mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1&#xff08;数据库名称&#xff09;&#xff08;中间是有一个空格的&#xff0…

Windows系统下如何定时备份MySQL数据库

Windows系统下如何定时备份MySQL数据库 使用mysqldump备份sql文件 假设mysql环境 MySQL安装位置 D:\mysql\mysql-5.7.30-winx64需要备份的数据库名称 springMySQL数据库账号 rootMySQL数据库密码 123456数据库备份地址 D:/mysqlBackup/ 则脚本按照下面写法&#xff1a; echo of…

mysql设置定时备份

不管是什么类型的数据库&#xff0c;我们都需要定时的备份&#xff0c;以便在出问题时可以及时恢复&#xff0c;减少损失。sqlserver的备份很简单&#xff0c;sqlserver自带&#xff0c;这里主要给大家分享下mysql的自动备份如何设置。 1.工具&#xff1a;navicat2.数据库:mys…

【数据库】定时备份mysql数据库

目录 一、创建放备份的目录二、编写脚本三、创建软链接四、赋予该脚本可执行权限五、测试脚本是否能正常执行六、进入备份文件夹查看是否正常备份七、安装cron服务八、创建定时备份任务 一、创建放备份的目录 cd / 进入根目录 mkdir backup 创建备份…