Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何有意创建.dep文件?_C_Makefile_Embedded_Gnu Make_Preprocessor - Fatal编程技术网

C 如何有意创建.dep文件?

C 如何有意创建.dep文件?,c,makefile,embedded,gnu-make,preprocessor,C,Makefile,Embedded,Gnu Make,Preprocessor,我有5个源文件(main.c、memory.c等),我想为它们生成依赖文件。dep 当我在网上搜索时,我发现大多数人只会受到编译器创建的文件的影响,有些人通过将它们强制添加到目录来解决这个问题。但是,我想故意创建它们(main.dep、memory.dep等) 如何让make通过我的命令为我自动创建它们: $ make build 我猜这将是一种顺序,我将输入CPPFLAGS,然后将CPPFLAGS包含到我的$(TARGET)中。输出配方,但我不知道具体是什么。有什么想法吗 这是我现在的Mak

我有5个源文件(main.c、memory.c等),我想为它们生成依赖文件。dep

当我在网上搜索时,我发现大多数人只会受到编译器创建的文件的影响,有些人通过将它们强制添加到目录来解决这个问题。但是,我想故意创建它们(main.dep、memory.dep等)

如何让make通过我的命令为我自动创建它们:

$ make build
我猜这将是一种顺序,我将输入CPPFLAGS,然后将CPPFLAGS包含到我的$(TARGET)中。输出配方,但我不知道具体是什么。有什么想法吗

这是我现在的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 $@
include sources.mk
#平台覆盖
ifeq($(平台),MSP432)
#架构特定标志
链接器_文件=msp432p401r.lds
CPU=cortex-m4
足弓=拇指
规格=nosys.SPECS
COMPILE=-DMSP432
LDFLAGS\u ARCH=-T$(链接器\u文件)
CFLAGS_ARCH=-mcpu=$(CPU)-m$(ARCH)--规格=$(规格)-march=armv7e-m
-mfloat abi=硬-mfpu=fpv4-sp-d16
OBJS=$(来源:.c=.o)
转储=arm none eabi objdump
#编译器标志和定义
CC=arm none eabi gcc
LD=臂无eabi LD
恩迪夫
ifeq($(平台),主机)
OBJS=$(源代码均为:.c=.o)
COMPILE=-DHOST
CC=gcc
DUMP=objdump
恩迪夫
目标=c1m2
LDFLAGS=-Wl,-Map=$(目标).Map$(LDFLAGS\u ARCH)
CFLAGS=$(CFLAGS_ARCH)$(包括)-墙-墙-墙-g-O0-标准=c99
$(编译)
CPPFLAGS=
.伪造:建造
生成:$(目标).out
.PHONY:编译所有
编译全部:$(OBJS)
CLEANO=main.o memory.o中断\u msp432p401r\u gcc.o
启动\u msp432p401r\u gcc.o系统\u msp432p401r.o
CLEANI=main.i memory.i中断\u msp432p401r\u gcc.i
启动\u msp432p401r\u gcc.i系统\u msp432p401r.i
CLEANASM=main.asm memory.asm中断\u msp432p401r\u gcc.asm
启动\u msp432p401r\u gcc.asm系统\u msp432p401r.asm
.假冒:干净
清洁:
$(RM)$(TARGET).out$(TARGET).map$(CLEANO)$(CLEANI)$(CLEANASM)
%.o:%.c
$(CC)-c$<$(CFLAGS)-o$@
%.i:%.c
$(CC)-E$<$(CFLAGS)-o$@
%.asm:%.o
$(转储)-S--反汇编$<>$@
$(目标)。输出:$(OBJS)
$(CC)$(OBJS)$(CFLAGS)$(LDFLAGS)-o$@

您只需在编译步骤中添加一行即可:

%.o : %.c
    $(CC) -c $< $(CFLAGS) -o $@

Okkay,这确实解决了我的问题,我还向第一个配方行添加了$(CFLAGS)以使其工作。现在,最后一个问题。它生成文件.c.dep。例如:main.c.dep如何使文件仅为.dep?@MahmoudSaad答案更新:您需要使用
$(patsubst…)
commandI尝试了它,但它给出了以下错误:#dep generation gcc-I./include/CMSIS-I./include/common-I./include/msp432-Wall-Werror-g-O0-std=c99-DHOST-MM main.c>%%.o : %.c # dep generation $(CC) -MM $< > $<.dep # compilation $(CC) -c $< $(CFLAGS) -o $@
%.o : %.c
    # dep generation
    $(CC) -MM $< > $(patsubst %.c,%.dep,%<)
    # compilation 
    $(CC) -c $< $(CFLAGS) -o $@