嵌入式 makefile的+=

本文详细介绍了Makefile中变量赋值的几种方式,包括直接赋值、追加赋值等,并通过具体示例说明了不同赋值方式的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的有

CPPFLAGS = -D_RELEASE    # 这类的你懂的,就是直接赋值给CPPFLAGS,会覆盖原先的值。

CPPFLAGS += -D_DEBUG   #这类的解释为CPPFLAGS变量继续追加一个 -D_DEBUG

CPPFLAGS := $(CPPFLAGS) + -D_DEBUG  #这类和 = 都是赋值,但是 := 不会进行递归,相当于C语言中的 = 赋值符号。此方法的相当于上一个方法的结论。此处如果用 = 号赋值话,makefile就会尝试扩展查找CPPFLAGS,结果找到了本行左边的CPPFLAGS,然后继续....就死循环了....
cur_dir := $(dir $(lastword $(MAKEFILE_LIST))) obj-y := $(patsubst $(cur_dir)%,%,$(wildcard $(cur_dir)*.c $(cur_dir)*.S)) obj-y := $(filter-out hal_mcu2cp.c, $(obj-y)) obj-y := $(obj-y:.c=.o) obj-y := $(obj-y:.S=.o) obj-y += $(CHIP)/ ifeq ($(ARM_CMNS),1) EXCLUDE_OBJS := hal_norflash.o EXCLUDE_OBJS += hal_norflash_se.o obj-y := $(filter-out $(EXCLUDE_OBJS),$(obj-y)) endif # CMU settings export CMU_CFG_FLAGS := # ANAIF settings export ANAIF_CFG_FLAGS := # PSC settings export PSC_CFG_FLAGS := # CODEC settings export CODEC_CFG_FLAGS := # IOMUX settings export IOMUX_CFG_FLAGS := FLASH_CFG_FLAGS := PSRAM_CFG_FLAGS := PSRAMUHS_CFG_FLAGS := ifneq ($(LTO_CFLAGS),) #KBUILD_CFLAGS := $(filter-out $(LTO_CFLAGS),$(KBUILD_CFLAGS)) #KBUILD_CPPFLAGS := $(filter-out $(LTO_CPPFLAGS),$(KBUILD_CPPFLAGS)) FLASH_CFG_FLAGS += -fno-lto CMU_CFG_FLAGS += -fno-lto PSC_CFG_FLAGS += -fno-lto CFLAGS_hal_spi.o += -fno-lto CFLAGS_hal_sysfreq.o += -fno-lto export CFLAGS_hal_analogif_$(CHIP).o += -fno-lto endif subdir-ccflags-y += -Iplatform/drivers/ana ifneq ($(PERIPH_PLL_FREQ),) ccflags-y += -DPERIPH_PLL_FREQ=$(PERIPH_PLL_FREQ) endif ifneq ($(filter-out 0,$(OTA_BOOT_SIZE)),) CFLAGS_hal_bootmode.o += -DOTA_BOOT_IMAGE endif ifeq ($(CHIP_CACHE_VER),) CFLAGS_hal_cache.o += -DCHIP_CACHE_VER=1 else CFLAGS_hal_cache.o += -DCHIP_CACHE_VER=$(CHIP_CACHE_VER) endif ifeq ($(CACHE_INVD_WAIT_IDLE),1) CFLAGS_hal_cache.o += -DCACHE_INVD_WAIT_IDLE endif ifneq ($(PC_CMD_UART_ID),) CFLAGS_hal_cmd.o += -DPC_CMD_UART_ID=$(PC_CMD_UART_ID) ifeq ($(TOTA_EQ_TUNING), 1) $(error TOTA_EQ_TUNING can not be defined together with PC_CMD_UART_ID) endif ifeq ($(SPP_EQ_TUNING), 1) $(error SPP_EQ_TUNING can not be defined together with PC_CMD_UART_ID) endif ifeq ($(USB_EQ_TUNING), 1) $(error USB_EQ_TUNING can not be defined together with PC_CMD_UART_ID) endif endif ifeq ($(USB_AUDIO_APP), 1) CFLAGS_hal_cmd.o += -DUSB_AUDIO_APP endif ifeq ($(CHIP_HAS_PSC),1) CFLAGS_hal_cmu_common.o += -DCHIP_HAS_PSC endif ifeq ($(JTAG_ENABLE),1) CFLAGS_hal_cmu_common.o += -DJTAG_ENABLE endif ifneq ($(CLOCK_OUT_ID),) CFLAGS_hal_cmu_common.o += -DCLOCK_OUT_ID=$(CLOCK_OUT_ID) endif ifeq ($(IDLE_SYS_FREQ_52M),1) CFLAGS_hal_cmu_common.o += -DIDLE_SYS_FREQ_52M endif ifeq ($(NO_FLASH_INIT),1) CFLAGS_hal_cmu_common.o += -DNO_FLASH_INIT CFLAGS_hal_sleep.o += -DNO_FLASH_INIT endif AUDIO_OUTPUT_VOLUME_DEFAULT ?= 10 ifneq ($(AUDIO_OUTPUT_VOLUME_DEFAULT),) CFLAGS_hal_codec_common.o += -DAUDIO_OUTPUT_VOLUME_DEFAULT=$(AUDIO_OUTPUT_VOLUME_DEFAULT) endif ifeq ($(CSI_CLK_HIGH_SPEED),1) CFLAGS_hal_csi.o += -DCSI_CLK_HIGH_SPEED endif 解析一下?
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值