C 生成Makefile以生成新创建的文件

C 生成Makefile以生成新创建的文件,c,makefile,C,Makefile,我在下面有一个Makefile,它将构建我将放在当前文件夹中的所有新的*.c文件。但事实并非如此。我创建了一个名为mouse\u cursor\u icon.c的新文件,并与main\u btn.c放在同一文件夹中。我希望make命令将生成并生成mouse\u cursor\u icon.o文件。但这并没有发生。如何解决这个问题 # # Makefile # CC ?= gcc LVGL_DIR_NAME ?= lvgl LVGL_DIR ?= ${shell pwd} CFLAGS ?= -O

我在下面有一个Makefile,它将构建我将放在当前文件夹中的所有新的*.c文件。但事实并非如此。我创建了一个名为
mouse\u cursor\u icon.c
的新文件,并与
main\u btn.c
放在同一文件夹中。我希望make命令将生成并生成
mouse\u cursor\u icon.o
文件。但这并没有发生。如何解决这个问题

#
# Makefile
#
CC ?= gcc
LVGL_DIR_NAME ?= lvgl
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmaybe-uninitialized -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wundef -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wno-switch-enum -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=1024 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wswitch-enum -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare
LDFLAGS ?= -lm
BIN = demo


#Collect the files to compile
MAINSRC = ./main_btn.c

include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk
include $(LVGL_DIR)/lv_examples/lv_examples.mk

OBJEXT ?= .o

AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))

MAINOBJ = $(MAINSRC:.c=$(OBJEXT))

SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
OBJS = $(AOBJS) $(COBJS)

## MAINOBJ -> OBJFILES

all: default

%.o: %.c
    @$(CC)  $(CFLAGS) -c $< -o $@
    @echo "CC $<"
    
default: $(AOBJS) $(COBJS) $(MAINOBJ)
    $(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)

clean: 
    rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)
#
#生成文件
#
CC?=gcc
LVGL\U目录\U名称?=LVGL
LVGL_DIR?=${shell pwd}
CFLAGS?=-O3-g0-I$(LVGL\U DIR)/-Wall-Wshadow-Wundef-Wmaybe未初始化-Wmissing prototype-Wno丢弃的限定符-Wall-Wextra-Wno未使用的函数-Wundef-Wno error=strict prototype-Wpointer arith-fno严格别名-Wno error=cpp-Wuninitialized-Wmaybe未初始化-Wno未使用的参数-Wno缺少字段初始化器-Wtype限制-Wsizeof pointer memaccess-Wno format nonliteral-Wno cast qual-Wunreachable code-Wno开关默认值-Wno开关枚举-Wreturn类型-Wmultichar-Wformat security-Wno忽略限定符-Wno错误=迂腐-Wno符号比较-Wno错误=缺少原型-Wdouble升级-Wclobbered-Wdeprecated-Wmpty body-Wtype限制-Wshift负值-Wstack usage=1024-Wno unused value-Wno unused parameter-Wno missing field initializers-Wuninitialized-Wmaybe uninitialized-Wall-Wextra-Wno missing field initializers-Wtype limits-Wsizeof pointer memaccess-Wno format nonliteral-Wpointer arith-Wno cast qual-Wmissing prototype-Wunreachable code-Wno开关默认值-Wswitch enum-Wreturn type-Wmultichar-Wno丢弃的限定符-Wformat security-Wno忽略的限定符-Wno符号比较
LDFLAGS?=-lm
BIN=演示
#收集要编译的文件
MAINSRC=/main\u btn.c
包括$(LVGL_DIR)/LVGL/LVGL.mk
包括$(LVGL\u DIR)/lv\u drivers/lv\u drivers.mk
包括$(LVGL_DIR)/lv_examples/lv_examples.mk
OBJEXT?=.o
AOBJS=$(ASRCS:.S=$(OBJEXT))
COBJS=$(CSRCS:.c=$(OBJEXT))
MAINOBJ=$(MAINSRC:.c=$(OBJEXT))
SRCS=$(ASRCS)$(CSRCS)$(主SRC)
OBJS=$(AOBJS)$(COBJS)
##MAINOBJ->objj文件
全部:默认值
%.o:%.c
@$(CC)$(CFLAGS)-c$<-o$@

@echo“CC$普通make没有任何(好的)方式来表示“在一个目录中构建所有的.c文件”。GNU make有允许这种事情的扩展:它定义了一个
通配符
函数,可用于获取与某个模式匹配的所有(源)文件。例如,您可以向Makefile中添加:

CSRCS := $(wildcard ./*.c)

$(CSRCS)
(您在其他地方使用并且从不定义)设置为当前目录中的所有.c文件。

整个makefile取决于
ASRCS
CSRCS
的值,但您不在此处定义它们。请阅读Make的文档和一些教程定义文件之间的依赖关系以及如何生成它们。-您的makefile没有显示任何包含所有C源代码的规则。