c_cpp_properties.json用法
在其中我们主要关注的还是 Include,defines,compilerPath这三个属性
1.Include:工程所依赖的H文件,其中不同平台有不同平台所必须的依赖,本文就三种指令集来总结该用法
X86: 如Intel系列芯片
ARM: 如STM32F103RC芯片
RISC-V: 如K210芯片
-
采用STM32-ARM的工程
-
采用K210-RISC-V的工程
-
X86比较常见不做展示
其中workspaceFolder表示当前工程目录,\**表示检索当前目录下的所有的h文件,
添加到工程的依赖当中,这时候问题就来了,我们跨平台开发时候,通常不是直接在那个平台开发,而是交叉编译文件后移植的方式在X86的架构上编写其他的架构的指令,所以我们就要根据提供的不同的平台来引入相应的依赖,其中编译器是把架构的指令(汇编语言)转为机器语言(二进制)的,不同平台的编译器都一样的,这样问题就知道了,当我们把其他平台依赖导入后,vscode就会从那个地方去寻找我们所需的依赖,就不会产生缺少.h依赖的报错了.
2.defines
这个要针对vscode的对makefi兼容性不够来理解,其中我用STM32做演示;
当去去除defines就会产生如下报错,很明显也是缺少依赖,但是我们在前面不是已经定义过了吗?
这时候就要跟随缺少的文件位置找到这里,这个头文件,这里问题就来了,为什么没有被引用
跟随提示我们找到这里,发现我们在一个起始的头文件里没有定义我们需要的文件,这就是条件编译,所以很明显defines的目的就是声明我们所需条件编译的文件是哪个.
3.compilerPath
上面也说了,gcc编译器都是一样的,只是转换C转汇编的区别,这个就是指明gcc位置,其中如果添加环境变量后vscode会自动帮你确定gcc位置,如果有多个gcc版本还可以自己选择