
Steven Zedeck said the following:
For example, I'm having problems understanding what this means in a Makefile:
COBJS-$(CONFIG_HAS_DATAFLASH) += at45.o COBJS-$(CONFIG_FLASH_CFI_DRIVER) += cfi_flash.o COBJS-$(CONFIG_HAS_DATAFLASH) += dataflash.o COBJS-$(CONFIG_FLASH_CFI_LEGACY) += jedec_flash.o COBJS-$(CONFIG_MW_EEPROM) += mw_eeprom.o
COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS))
This is from drivers/mtd/Makefile.
How does COBJS get initially defined upon entry into the Makefile?
Does at45.o get added to the list of objects to be built only if the CONFIG_HAS_DATAFLASH flag is set?
What does the "-" sign mean before the "$" ?
On start of compile, the file autoconf.mk is generated along your board configuration #defines in board/<board>/<board-name>.h It looks like this: CONFIG_PPC=y CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_R=y CONFIG_SYS_CLK_FREQ=100000000 CONFIG_CMD_ITEST=y ...
autoconf.mk is then used as a predefinition file for the rules of your Makefile. So COBJS-$(CONFIG_HAS_DATAFLASH) += at45.o evaluates to either COBJS-y += at45.o or COBJS- += at45.o or COBJS-n += at45.o
What does this mean? COBJS := $(COBJS-y)
This is the assignment of the dynamically built string to the variable that is then used for the gcc command.
HTH