设置文件编译规则的makefile---配置编译器环境的c_pp_properties.json---设置的文本配置seting.json

1、设置文件编译规则的Makefile

1看看书《跟我一起写Makefile》只有78页,P0~13是makefile 的概貌,也是 makefile 的基础,

makefile变量使用的操作符
“=” -------在P32-----变量是可以使用后面的变量来定义的,即在用=第一次定义后的变量,后面的再次定义在这些再次定义和第一次定义之间只用第一次定义的内容,即在这个区间内第一次定义的什么就是什么
“:=” -------在P33-----我们可以使用“+=”操作符给变量赋值,用于赋值的变量注意:某A处某变量做赋值变量,不能使用A处后面该变量的变化后的值,只能使用在A处前面该变量已定义的值。
“=?”------在P34----FOO ?= bar其含义是,如果 FOO 没有被定义过,那么变量 FOO 的值就是“bar”,如果 FOO 先前被定义
过,那么这条语将什么也不做
“+=” -------在P37-----追加
以“$”开头的特殊变量
“ $<” ,“ $@” -------在P23----依赖(<像衣挂,依赖),目标

裸机led实验执行make指令终端弹出的信息

//交叉编译执行选项-Wall:编译后显示所有警告;
         执行选项-nostdlib : 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器;
         执行选项-fno-builtin:不识别不以__builtin_作为前缀的内置函数;
         执行选项-c:预处理,编译和汇编源文件,但不做连接,编译器根据源文件生成OBJ文件;
         执行选项-O2:选择优化选项O2,进行优化;
         执行选项-I library:连接名为 library 的库文件
         执行选项-o file:指定交叉编译输出文件为file
arm-linux-gnueabihf-gcc -Wall -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/start.o project/start.S 
arm-linux-gnueabihf-gcc -Wall -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/lib1funcs.o stdio/lib/lib1funcs.S 
//交叉编译执行选项-Wa,-mimplicit-it=thumb: 将逗号分隔的-mimplicit-it=thumb传递给汇编器 
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/main.o project/main.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/ctype.o stdio/lib/ctype.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/muldi3.o stdio/lib/muldi3.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/printf.o stdio/lib/printf.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/div64.o stdio/lib/div64.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/string.o stdio/lib/string.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/vsprintf.o stdio/lib/vsprintf.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_clk.o bsp/clk/bsp_clk.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_led.o bsp/led/bsp_led.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_delay.o bsp/delay/bsp_delay.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_beep.o bsp/beep/bsp_beep.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_gpio.o bsp/gpio/bsp_gpio.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_key.o bsp/key/bsp_key.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_exit.o bsp/exit/bsp_exit.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_int.o bsp/int/bsp_int.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_epittimer.o bsp/epittimer/bsp_epittimer.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_keyfilter.o bsp/keyfilter/bsp_keyfilter.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_uart.o bsp/uart/bsp_uart.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_lcd.o bsp/lcd/bsp_lcd.c
arm-linux-gnueabihf-gcc -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2   -I imx6ul  -I stdio/include  -I bsp/clk  -I bsp/led  -I bsp/delay  -I bsp/beep  -I bsp/gpio  -I bsp/key  -I bsp/exit  -I bsp/int  -I bsp/epittimer  -I bsp/keyfilter  -I bsp/uart  -I bsp/lcd -o obj/bsp_lcdapi.o bsp/lcd/bsp_lcdapi.c
//链接-T 文件,--script 文件:读取链接脚本。正点原子写的imx6ul.lds中设置好了程序连接地址,代码段数据段等等,
//    -o 文件,--output 文件:设定输出文件名
//    -L 目录,--library -path:将目录添加到库搜索路径中
arm-linux-gnueabihf-ld -Timx6ul.lds -o lcd.elf obj/start.o obj/lib1funcs.o obj/main.o obj/ctype.o obj/muldi3.o obj/printf.o obj/div64.o obj/string.o obj/vsprintf.o obj/bsp_clk.o obj/bsp_led.o obj/bsp_delay.o obj/bsp_beep.o obj/bsp_gpio.o obj/bsp_key.o obj/bsp_exit.o obj/bsp_int.o obj/bsp_epittimer.o obj/bsp_keyfilter.o obj/bsp_uart.o obj/bsp_lcd.o obj/bsp_lcdapi.o -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4 
//格式转换-O --output-target <bfdname>:创建格式为<bfdname>的输出文件  
         -S --strip-all:删除所有符号和重定位信息,  -S lcd.elf lcd.bin应该是删除lcd.elf lcd.bin两文件的符号和重定位信息
arm-linux-gnueabihf-objcopy -O binary -S lcd.elf lcd.bin 
//反汇编-D,--disassemble-all:显示所有section的汇编程序内容  
        -m, --architecture=MACHINE:将标的体系结构指定为 MACHINE  ,'-m'  后面跟的是cpu构架  arm就表示是arm构架的cpu '>' 表示将这个程序的反汇编程序写入到led.dis这个文件中,在终端中不显示出来.
arm-linux-gnueabihf-objdump -D -m arm lcd.elf > lcd.dis 
//这个makefile中的变量都只定义了一次,因此“=”,“:=”,"=?"的作用相同,都是定义为一个值

CROSS_COMPILE 	?= arm-linux-gnueabihf-             定义变量CROSS_COMPILE并赋值为arm-linux-gnueabihf-  (cross .n交叉,十字架compile v.编译)   
TARGET		  	?= lcd                              定义变量TARGET并赋值为lcd (target n. 目标)

CC 				:= $(CROSS_COMPILE)gcc              定义变量CC并赋值为arm-linux-gnueabihf-gcc (arm-linux-gnueabihf-gcc是交叉编译)
LD				:= $(CROSS_COMPILE)ld               定义变量LD并赋值为arm-linux-gnueabihf-ld (arm-linux-gnueabihf-ld是链接)
OBJCOPY 		:= $(CROSS_COMPILE)objcopy          定义变量OBJCOPY并赋值为arm-linux-gnueabihf-objcopy (arm-linux-gnueabihf-objcopy是格式转换)
OBJDUMP 		:= $(CROSS_COMPILE)objdump          定义变量OBJDUMP并赋值为arm-linux-gnueabihf-objdump(arm-linux-gnueabihf-objdump是反汇编)

LIBPATH			:= -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4    //path n.路径;定义变量LIBPATH并赋值为-lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4

//变量INCDIRS和SRCDIRS只有前两个不同INCDIRS为imx6ul stdio/include     bsp/clk bsp/led bsp/delay bsp/beep bsp/gpio bsp/key bsp/exit bsp/int bsp/epittimer bsp/keyfilter bsp/uart bsp/lcd
                                //SRCDIRS为project stdio/lib        bsp/clk bsp/led bsp/delay bsp/beep bsp/gpio bsp/key bsp/exit bsp/intbsp/epittimer bsp/keyfilter bsp/uart bsp/lcd
                                  
                                                     include 包含文件包括头文件
INCDIRS 		:= imx6ul \                          定义变量INCDIRS并赋值为imx6ul stdio/include bsp/clk bsp/led bsp/delay  bsp/beep bsp/gpio bsp/key bsp/exit bsp/int bsp/epittimer bsp/keyfilter bsp/uart bsp/lcd
				   stdio/include \
				   bsp/clk \
				   bsp/led \
				   bsp/delay  \
				   bsp/beep \
				   bsp/gpio \
				   bsp/key \
				   bsp/exit \
				   bsp/int \
				   bsp/epittimer \
				   bsp/keyfilter \
				   bsp/uart \
				   bsp/lcd
				   			                         Source 来源源原文地址源头
SRCDIRS			:= project \                         定义变量SRCDIRS并赋值为project stdio/lib bsp/clk bsp/led bsp/delay bsp/beep bsp/gpio bsp/key bsp/exit bsp/int bsp/epittimer bsp/keyfilter bsp/uart bsp/lcd
				   stdio/lib \
				   bsp/clk \
				   bsp/led \
				   bsp/delay \
				   bsp/beep \
				   bsp/gpio \
				   bsp/key \
				   bsp/exit \
				   bsp/int \
				   bsp/epittimer \
				   bsp/keyfilter \
				   bsp/uart \
				   bsp/lcd
				   
				   
INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))                      定义变量INCLUDE并赋值为  模式字符串替换函数patsubst

SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))   函数$(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))返回
//project/通配符.S  stdio/lib/通配符.S  bsp/clk/通配符.S  bsp/led/通配符.S  bsp/delay/通配符.S  bsp/beep/通配符.S  bsp/gpio/通配符.S  bsp/key/通配符.S  bsp/exit/通配符.S  bsp/int/通配符.S  bsp/epittimer/通配符.S  bsp/keyfilter/通配符.S  bsp/uart/通配符.S  bsp/lcd/通配符.S
//这其中只能匹配project/start.S,所以定义变量SFILES并赋值为project/start.S (由此可以猜测SFILES指.S文件)
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))   定义变量CFILES并赋值为project/main.c  bsp/clk/bsp_clk.c  bsp/led/bsp_lcd.c  bsp/led/bsp_lcdapi.c  bsp/delay/bsp_delay  bsp/beep/bsp_beep  bsp/gpio/bsp_gpio.c  bsp/key/bsp_key.c  bsp/exit/bsp_exit.c  bsp/int/bsp_int.c  bsp/epittimer/bsp_ epittimer bsp/keyfilter/bsp_ keyfilter bsp/uart/bsp_uart  bsp/lcd/bsp_lcd  bsp/lcd/bsp_lcdapi.c  

SFILENDIR		:= $(notdir  $(SFILES))                                 定义变量SFILENDIR并赋值为start.S 
CFILENDIR		:= $(notdir  $(CFILES))                                 定义变量CFILENDIR并赋值为main.c  bsp_clk.c  bsp_lcd.c  bsp_lcdapi.c  bsp_delay  bsp_beep  bsp_gpio.c  bsp_key.c  bsp_exit.c  bsp_int.c  bsp_ epittimer bsp_ keyfilter bsp_uart  bsp_lcd  bsp_lcdapi.c  

SOBJS			:= $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS			:= $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS			:= $(SOBJS) $(COBJS)

VPATH			:= $(SRCDIRS)

.PHONY: clean   为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向 make 说明,不管是否有这个文件,这个目标就是“伪目标”。
	
$(TARGET).bin : $(OBJS)
	$(LD) -Timx6ul.lds -o $(TARGET).elf $^ $(LIBPATH)
	$(OBJCOPY) -O binary -S $(TARGET).elf $@
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

$(SOBJS) : obj/%.o : %.S
	$(CC) -Wall -nostdlib -fno-builtin -c -O2  $(INCLUDE) -o $@ $<

$(COBJS) : obj/%.o : %.c
	$(CC) -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2  $(INCLUDE) -o $@ $<
	
clean:
	rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

2. 配置编译器环境c_pp_properties.jison

示例1

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"          //folder n.文件夹;**应该是通配符的作用
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}

示例2

{
//用户自定义变量,可用于在其他配置属性中进行替换,在本例中myDefaultIncludePath即为用户自定义变量,在configurations.includePath字段下被引用。
  "env": {
    "myDefaultIncludePath": ["${workspaceFolder}", "${workspaceFolder}/include"],
    "myCompilerPath": "/usr/local/bin/gcc-7"
  },
//一组配置对象,向智能感知引擎提供有关你的项目和首选项的信息。默认情况下,扩展插件会根据操作系统自动创建相关信息,我们自定义配置主要就是修改这里。
  "configurations": [
    {
      "name": "Mac",/*用来标识配置文件,一般是内核的名字就可以了,如"Linux"*/
      "intelliSenseMode": "clang-x64",/*智能感知模式,有msvc-x64.gcc-x64和clang-x64,根据编译器的前端选择就行,例如我的xtensa编译器选的是gcc-x64*/
      "includePath": ["${myDefaultIncludePath}", "/another/path"],/*包含路径是包含源文件中包含的头文件(如#include“myHeaderFile.h”)的文件夹。指定IntelliSense引擎在搜索包含的头文件时要使用的路径列表。如果路径以/**结尾,IntelliSense引擎将从该目录开始递归搜索头文件。如果在安装了Visual Studio的Windows上,或者在编译器路径设置中指定了编译器,则无需在此列表中列出系统包含路径*/
      "macFrameworkPath": ["/System/Library/Frameworks"],/**/
      "defines": ["FOO", "BAR=100"],/*用于智能感知引擎在解析文件时使用的预处理程序定义的列表。可以选择使用=设置一个值,例如VERSION=1,我使用vscode的目的是为了代码的智能提示,并不是要实时检测代码的正确性,所以不必要将在编译时加上的宏定义在这里写上,用browse来自动搜索可用的宏定义就行了*/
      "forcedInclude": ["${workspaceFolder}/include/config.h"],/**/
      "compilerPath": "/usr/bin/clang",/*用于构建项目的编译器的完整路径,例如/usr/bin/gcc,以启用更精确的智能感知。扩展将查询编译器,以确定系统包含的路径和用于智能感知的默认定义(网易翻译)在交叉编译时,将该字段设置为编译器的绝对路径就行了,例如/root/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc*/
      "cStandard": "c11",/*用于智能感知的C语言标准版本,根据实际情况确定*/
      "cppStandard": "c++17",/*用于智能感知的c++语言标准的版本,根据实际情况确定*/
      "compileCommands": "/path/to/compile_commands.json",/*compile_命令的完整路径。工作区的json文件。将使用在此文件中找到的包含路径和定义,而不是为includePath和defines设置设置的值。如果compile commands数据库不包含与在编辑器中打开的文件对应的翻译单元条目,则会出现警告消息,扩展名将使用includePath并定义设置*/
     //--/*browse很少,只有三个*/
      "browse": {
        "path": ["${workspaceFolder}"],/*标记解析器搜索源文件包含的标题的路径列表。如果省略,includePath将用作路径。默认情况下,在这些路径上搜索是递归的。指定*表示非递归搜索。例如:/usr/include将搜索所有子目录,而/usr/include/*不会*/
        "limitSymbolsToIncludedHeaders": true,/*如果为true,则标记解析器将只解析源文件直接或间接包含在${workspaceFolder}中的代码文件。如果为false,标记解析器将解析在浏览中指定的路径中找到的所有代码文件。路径列表。*/
        "databaseFilename": ""/**/
      }
    }
  ],
//建议不要编辑这个字段,它跟踪c_cpp_properties.json文件的当前版本,以便扩展插件知道应该显示什么属性和设置,以及如何将该文件升级到最新版本。
  "version": 4
}

核心字段含义

env(environment .n环境)
用户自定义变量,可用于在其他配置属性中进行替换,在本例中myDefaultIncludePath即为用户自定义变量,configurations.includePath字段下被引用。、

configurations(configurations n.布局;结构;构造;格局;形状;(计算机的)配置)
一组配置对象,向智能感知引擎提供有关你的项目和首选项的信息。默认情况下,扩展插件会根据操作系统自动创建相关信息,我们自定义配置主要就是修改这里。

version(version n.版本;型式)
建议不要编辑这个字段,它跟踪c_cpp_properties.json文件的当前版本,以便扩展插件知道应该显示什么属性和设置,以及如何将该文件升级到最新版本。

Configuration字段官方解释–多半用到-英文可以不看

name用来标识配置文件,一般是内核的名字就可以了,如"Linux"

compilerPath(compiler v.编译程序path n.路径;道路;)
用于构建项目的编译器的完整路径,例如/usr/bin/gcc,以启用更精确的智能感知。扩展将查询编译器,以确定系统包含的路径和用于智能感知的默认定义(网易翻译)
在交叉编译时,将该字段设置为编译器的绝对路径就行了,例如/root/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc

compilerArgs(argument n.参数;论点; 争论; 论据; 辩论; 争吵; 争辩; 理由;)
编译选项,之所以不重要,是因为defines的问题可以用browse解决,而include问题可以用includePath字段解决,该字段可以不写
intelliSenseMode(intelligence n.智力sense n.感觉v.感觉到)
智能感知模式,有msvc-x64.gcc-x64和clang-x64,根据编译器的前端选择就行,例如我的xtensa编译器选的是gcc-x64
用一张图直观地展现了编译器的整个编译过程:
在这里插入图片描述

includePath(重要)

includePath(重要)
An include path is a folder that contains header files (such as #include “myHeaderFile.h”) that are included in a source file. Specify a list of paths for the IntelliSense engine to use while searching for included header files. If a path ends with /** the IntelliSense engine will do a recursive search for header files starting from that directory. If on Windows with Visual Studio installed, or if a compiler is specified in the compilerPath setting, it is not necessary to list the system include paths in this list.(官方文档)

包含路径是包含源文件中包含的头文件(如#include“myHeaderFile.h”)的文件夹。指定IntelliSense引擎在搜索包含的头文件时要使用的路径列表。如果路径以/结尾,IntelliSense引擎将从该目录开始递归搜索头文件。如果在安装了Visual Studio的Windows上,或者在编译器路径设置中指定了编译器,则无需在此列表中列出系统包含路径
在vscode的c_cpp_properties.json中设置includePath时,如果有多个相同的头文件,在查看的时候,会按照includePath中的路径次序进行索引。
用这个在要包含的主目录后面加上
通配符就可以递归搜索,非常方便
defines(define vt.定义; 界定; 明确; 解释)
用于智能感知引擎在解析文件时使用的预处理程序定义的列表。可以选择使用=设置一个值,例如VERSION=1,我使用vscode的目的是为了代码的智能提示,并不是要实时检测代码的正确性,所以不必要将在编译时加上的宏定义在这里写上,用browse来自动搜索可用的宏定义就行了

cStandard(standardn. 标准)用于智能感知的C语言标准版本,根据实际情况确定

cppStandard用于智能感知的c++语言标准的版本,根据实际情况确定

configurationProvider(provider n.供应者)用不到

compileCommands(compilevt. 编写; 编译command n./v.命令)

compileCommands(compilevt.	编写; 编译command n./v.命令)
The full path to the compile_commands.json file for the workspace. The include paths and defines discovered in this file will be used instead of the values set for includePath and defines settings. If the compile commands database does not contain an entry for the translation unit that corresponds to the file you opened in the editor, then a warning message will appear and the extension will use the includePath and defines settings instead.

compile_命令的完整路径。工作区的json文件。将使用在此文件中找到的包含路径和定义,而不是为includePath和defines设置设置的值。如果compile commands数据库不包含与在编辑器中打开的文件对应的翻译单元条目,则会出现警告消息,扩展名将使用includePath并定义设置。用不到,因为有browse

browse(重要)(browse n./v.浏览)

browse(重要)(browse n./v.浏览)
The set of properties used when “C_Cpp.intelliSenseEngine” is set to “Tag Parser” (also referred to as “fuzzy” IntelliSense, or the “browse” engine). These properties are also used by the Go To Definition/Declaration features, or when the “Default” IntelliSense engine is unable to resolve the #includes in your source files(官方文档)

如果只是将需要包含的头文件放在includePath字段中,那么include的问题解决了,但是defines的问题还没有解决,这将会出现一大堆的提示,这些提示大部分都是因为缺少相应的宏定义引起的,而browse可以搜索相应browse.path字段中所有的宏定义,并把缺少的宏定义补全,让Definition/Declaration操作可以无障碍

browse字段官方解释–多半用到-英文可以不看

很少,只有三个
path()

path()
A list of paths for the Tag Parser to search for headers included by your source files. If omitted, includePath will be used as the path. Searching on these paths is recursive by default. Specify * to indicate non-recursive search. For example: /usr/include will search through all subdirectories while /usr/include/* will not(官方文档)

标记解析器搜索源文件包含的标题的路径列表。如果省略,includePath将用作路径。默认情况下,在这些路径上搜索是递归的。指定*表示非递归搜索。例如:/usr/include将搜索所有子目录,而/usr/include/*不会
注意通配符问题,与includePath字段不相同

limitSymbolsToIncludedHeaders

limitSymbolsToIncludedHeaders(limit  n./v.限度; 限制;symbol  n.象征; 符号; 代号; 记号;vt.用符号代表to included包括header n.用头顶球; 头球; (计算机打印时自动加在各页顶端的)标头,首标;)
When true, the Tag Parser will only parse code files that have been directly or indirectly included by a source file in ${workspaceFolder}. When false, the Tag Parser will parse all code files found in the paths specified in the browse.path list.(官方文档)

如果为true,则标记解析器将只解析源文件直接或间接包含在${workspaceFolder}中的代码文件。如果为false,标记解析器将解析在浏览中指定的路径中找到的所有代码文件。路径列表。
通常设置为true,如果有些代码没法智能提示可以将该字段设置为false试试

databaseFilename(database n.(储存在计算机中的)数据库)用不上

3、设置的文本配置seting.json

1设置是什么

在这里插入图片描述

2怎么用

settings.json的两种配置位置

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值