如何有意创建 .dep 文件?
How to intentionally create .dep files?
我有 5 个源文件(main.c、memory.c 等)我想为所有这些文件生成依赖文件 .dep
我在网上搜索的时候发现,大多数人只是受编译器创建的那些文件的困扰,有些人通过强行将它们添加到目录中来解决这个问题。但是,我想故意将它们创建为 (main.dep、memory.dep,等等)
如何让 make 通过我的命令自动为我创建它们:
$ make build
我想我会在 CPPFLAGS 中放入某种顺序,然后将 CPPFLAGS 包含到我的 $(TARGET).out 配方中,但我不知道具体是什么。有什么想法吗?
这是我现在的 Makefile:
include sources.mk
# Platform Overrides
ifeq ($(PLATFORM),MSP432)
# Architectures Specific Flags
LINKER_FILE = msp432p401r.lds
CPU = cortex-m4
ARCH = thumb
SPECS = nosys.specs
COMPILE = -DMSP432
LDFLAGS_ARCH = -T $(LINKER_FILE)
CFLAGS_ARCH = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -march=armv7e-m
-mfloat-abi=hard -mfpu=fpv4-sp-d16
OBJS = $(SOURCES:.c=.o)
DUMP = arm-none-eabi-objdump
# Compiler Flags and Defines
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
endif
ifeq ($(PLATFORM),HOST)
OBJS = $(SOURCES_BOTH:.c=.o)
COMPILE = -DHOST
CC = gcc
DUMP = objdump
endif
TARGET = c1m2
LDFLAGS = -Wl,-Map=$(TARGET).map $(LDFLAGS_ARCH)
CFLAGS = $(CFLAGS_ARCH) $(INCLUDES) -Wall -Werror -g -O0 -std=c99
$(COMPILE)
CPPFLAGS =
.PHONY: build
build: $(TARGET).out
.PHONY: compile-all
compile-all: $(OBJS)
CLEANO = main.o memory.o interrupts_msp432p401r_gcc.o
startup_msp432p401r_gcc.o system_msp432p401r.o
CLEANI = main.i memory.i interrupts_msp432p401r_gcc.i
startup_msp432p401r_gcc.i system_msp432p401r.i
CLEANASM = main.asm memory.asm interrupts_msp432p401r_gcc.asm
startup_msp432p401r_gcc.asm system_msp432p401r.asm
.PHONY: clean
clean:
$(RM) $(TARGET).out $(TARGET).map $(CLEANO) $(CLEANI) $(CLEANASM)
%.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
%.i : %.c
$(CC) -E $< $(CFLAGS) -o $@
%.asm : %.o
$(DUMP) -S --disassemble $< > $@
$(TARGET).out: $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LDFLAGS) -o $@
您可以在编译步骤中简单地添加一行:
%.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
会变成:
%.o : %.c
# dep generation
$(CC) -MM $< > $<.dep
# compilation
$(CC) -c $< $(CFLAGS) -o $@
如果你希望依赖文件扩展名是.dep
而不是.c.dep
,你可以调整这个规则:
%.o : %.c
# dep generation
$(CC) -MM $< > $(patsubst %.c,%.dep,%<)
# compilation
$(CC) -c $< $(CFLAGS) -o $@
我有 5 个源文件(main.c、memory.c 等)我想为所有这些文件生成依赖文件 .dep
我在网上搜索的时候发现,大多数人只是受编译器创建的那些文件的困扰,有些人通过强行将它们添加到目录中来解决这个问题。但是,我想故意将它们创建为 (main.dep、memory.dep,等等)
如何让 make 通过我的命令自动为我创建它们:
$ make build
我想我会在 CPPFLAGS 中放入某种顺序,然后将 CPPFLAGS 包含到我的 $(TARGET).out 配方中,但我不知道具体是什么。有什么想法吗?
这是我现在的 Makefile:
include sources.mk
# Platform Overrides
ifeq ($(PLATFORM),MSP432)
# Architectures Specific Flags
LINKER_FILE = msp432p401r.lds
CPU = cortex-m4
ARCH = thumb
SPECS = nosys.specs
COMPILE = -DMSP432
LDFLAGS_ARCH = -T $(LINKER_FILE)
CFLAGS_ARCH = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -march=armv7e-m
-mfloat-abi=hard -mfpu=fpv4-sp-d16
OBJS = $(SOURCES:.c=.o)
DUMP = arm-none-eabi-objdump
# Compiler Flags and Defines
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
endif
ifeq ($(PLATFORM),HOST)
OBJS = $(SOURCES_BOTH:.c=.o)
COMPILE = -DHOST
CC = gcc
DUMP = objdump
endif
TARGET = c1m2
LDFLAGS = -Wl,-Map=$(TARGET).map $(LDFLAGS_ARCH)
CFLAGS = $(CFLAGS_ARCH) $(INCLUDES) -Wall -Werror -g -O0 -std=c99
$(COMPILE)
CPPFLAGS =
.PHONY: build
build: $(TARGET).out
.PHONY: compile-all
compile-all: $(OBJS)
CLEANO = main.o memory.o interrupts_msp432p401r_gcc.o
startup_msp432p401r_gcc.o system_msp432p401r.o
CLEANI = main.i memory.i interrupts_msp432p401r_gcc.i
startup_msp432p401r_gcc.i system_msp432p401r.i
CLEANASM = main.asm memory.asm interrupts_msp432p401r_gcc.asm
startup_msp432p401r_gcc.asm system_msp432p401r.asm
.PHONY: clean
clean:
$(RM) $(TARGET).out $(TARGET).map $(CLEANO) $(CLEANI) $(CLEANASM)
%.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
%.i : %.c
$(CC) -E $< $(CFLAGS) -o $@
%.asm : %.o
$(DUMP) -S --disassemble $< > $@
$(TARGET).out: $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LDFLAGS) -o $@
您可以在编译步骤中简单地添加一行:
%.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
会变成:
%.o : %.c
# dep generation
$(CC) -MM $< > $<.dep
# compilation
$(CC) -c $< $(CFLAGS) -o $@
如果你希望依赖文件扩展名是.dep
而不是.c.dep
,你可以调整这个规则:
%.o : %.c
# dep generation
$(CC) -MM $< > $(patsubst %.c,%.dep,%<)
# compilation
$(CC) -c $< $(CFLAGS) -o $@