【零基础求问】请问一下我的VS CODE为什么下不起makefile啊?一安装就提示右下角(第一张图)。然后我手动安装之后那个文件是什么啊?(第二张图)
SOURCE := $(wildcard $(SRC)/*.c)
OBJS := $(patsubst %.c,$(OBJ)/%.o,$(notdir $(SOURCE)))
MAIN_SOURCE := $(wildcard $(DIR)/*.c)
MAIN_OBJS := $(patsubst %.c,$(OBJ)/%.o,$(notdir $(MAIN_SOURCE)))
首先看第一句,SOURCE := $(wildcard $(SRC)/*.c) ,此句的执行结果是将src文件夹中的所有c文件列举出来,比如./src/a.c、./src/b.c等等,中间自动用空格分开,echo $(SOURCE),应该输出./src/a.c ./src/b.c等等。
变量名为SOURCE,$var代表引用名为var的变量,wildcard意为扩展通配符(普通的通配符为%,但是在包含文件路径时%不好用,因为%只能匹配文件名),用法为$(wildcard PATTERN...),将符合PATTERN格式的所有文件列举出来,并以空格分开,此句中的PATTERN为$(SRC)/.*c,意为./src文件夹中所有.c文件,*代表任意文件名。
第二句为可以生成的目标文件,OBJS := $(patsubst %.c,$(OBJ)/%.o,$(notdir $(SOURCE))) ,这句话的执行结果是将所有.c文件替换成.o文件,并且放在obj目录下,即echo $(OBJS),应该输出./obj/a.o ./obj/b.o 等等,但是这句话并不真的生成.o文件,只是替换而已。
patsubst函数以为替换通配符,用法为$(patsubst <pattern>,<replacement>,<text> ),将符合text文本中的.c文件,都替换成replacement。在此句中即是将SOURCE中的所有.c文件都替换到obj目录下的.o文件。在这里,注意pattern位置的.c不要带任何文件路径,就只用通配符%即可,之前看别的教程带有目录,我测试了一下并不对。。。去掉就好了;text中的notdir一定要加,因为前面用的是通配符%,不去掉文件目录会报错的,echo $(notdir $(SOURCE)),输出的就是 a.c b.c等等,将前面的./src/去掉了。
第三四句和第一二句类似。