c - 如何有意创建 .dep 文件?

标签 c makefile embedded gnu-make preprocessor

我有 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 $@

关于c - 如何有意创建 .dep 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52863965/

相关文章:

makefile - CheckCXXCompilerFlag 或 CheckCCompilerFlag 一次检查一组标志

c - 如何将 pgm_read_byte 宏 (AVR-GCC) 移植到 Mircrochip C18 编译器?

c - FatFS f_write 不工作

embedded - 在 x86 嵌入式设备上安装 Windows CE

c - 如何生成最多 18 位数字,其倒数之和为整数

c - 套接字设置为O_NONBLOCK,但有时发送数据时调用线程似乎仍然进入休眠状态

c++ - 链接到好友功能时出错

c - 智能 Makefile : way scan directory tree and compile . c 文件

c - rand() 函数行为

crtexe.c - 关于在 VSCode 中调试 C/C++ 文件的问题