My main project directory has 4 sub-directories and each sub directory has some .c and .S files. I have written only one Makefile outside which contains lines like this:
...
AS_SRC= $(wildcard cpu/*.S) $(wildcard drivers/*.S) $(wildcard lib/*.S) $(wildcard init/*.S)
C_SRC= $(wildcard cpu/*.c) $(wildcard drivers/*.c) $(wildcard lib/*.c) $(wildcard init/*.c)
OBJS = $(AS_SRC:.S=.o) $(C_SRC:.c=.o)
.PHONY: all
all: $(TARGET).bin
%.o: %.S
@$(CC) -x assembler-with-cpp $(ASFLAGS) $< -o $@
%.o: %.c
@$(CC) -c $(CFLAGS) $(INCLUDE) $< -o $@
$(TARGET).elf: $(OBJS)
@$(CC) $^ $(LFLAGS) -o $@
$(TARGET).bin: $(TARGET).elf
@$(OC) -S -O binary $< $@
...
I understand that this is not a very good way to write Makefile. I want to have a .config file based on which It will be decided on what files to compile. Also I would like to use those config options in code something like #ifdef CONFIG_SOMETHING
. I tried to understand from main Makefile of Linux kernel code and implement something similar, however that Makefile seems too complex.
Can anyone give suggestion on how to go about it? I already tried searching google but couldn't find any hint on how to go about having a config file.
If the config file follows the Makefile rules (var=value), you can use include
In your Makefile:
CONFIG = default.config
include ${CONFIG}
ifdef (... test on CONFIG setting)
endif
When make is invoked without parameters (that is make target
), it will use the 'default' config file (default.config above). To run make with a different config use make CONFIG=alt.config ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With