이 메이크 파일은 ARM 마이크로 컨트롤러 용 16 진수 파일을 만들기위한 것입니다. 내 메이크 파일은 폴더에 저장된 모든 c 파일을 가져와 16 진수 파일을 생성합니다. 16 진수 파일, .obj 파일 등은 bin 폴더에 저장됩니다.Makefile이 여러 c 파일에서는 작동하지 않지만 단일 c 파일에서는 작동합니다.
내 makefile이 잘 작동합니다 (즉, 16 진수 파일, .obj 파일 등을 볼 수 있습니다). 폴더 안에 하나의 c 파일 만 있으면됩니다. 그러나 폴더에 둘 이상의 c 파일을 배치하면 빌드가 실패합니다. 다음은 하나 이상의 c 파일이있을 때 얻을 수있는 오류입니다.
arm-none-eabi-gcc: error: main.o: No such file or directory
make: *** [32bitTimer.elf] Error 1
참조 용으로 메이크 파일을 첨부하고 있습니다.
왜 여러 c 파일에서 작동하지 않는지 알려주십시오.
## makefile
BINARY = 32bitTimer
LDSCRIPT = stm32f4-discovery.ld
SRCS = $(wildcard *.c)
OBJDIR = bin
PREFIX = arm-none-eabi
CC = $(PREFIX)-gcc
LD = $(PREFIX)-gcc
OBJCOPY = $(PREFIX)-objcopy
OBJDUMP = $(PREFIX)-objdump
GDB = $(PREFIX)-gdb
TOOLCHAIN_DIR ?= ../libopencm3
CFLAGS += -Os -g \
-Wall -Wextra -Wimplicit-function-declaration \
-Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \
-Wundef -Wshadow \
-I$(TOOLCHAIN_DIR)/include \
-fno-common -mcpu=cortex-m4 -mthumb \
-mfloat-abi=hard -mfpu=fpv4-sp-d16 -MD -DSTM32F4
LDFLAGS += --static -lc -lnosys -L$(TOOLCHAIN_DIR)/lib \
-L$(TOOLCHAIN_DIR)/lib/stm32/f4 \
-T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections \
-mthumb -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16
OBJS = $(SRCS:.c=.o)
# Be silent per default, but 'make V=1' will show all compiler calls.
ifneq ($(V),1)
Q := @
endif
all: $(OBJDIR) $(BINARY).images
%.images: %.elf
$(Q)$(OBJCOPY) -Obinary $(OBJDIR)/$(*).elf $(OBJDIR)/$(*).bin
$(Q)$(OBJCOPY) -Oihex $(OBJDIR)/$(*).elf $(OBJDIR)/$(*).hex
$(Q)$(OBJCOPY) -Osrec $(OBJDIR)/$(*).elf $(OBJDIR)/$(*).srec
$(Q)$(OBJDUMP) -S $(OBJDIR)/$(*).elf > $(OBJDIR)/$(*).list
$(BINARY).elf: $(OBJS) $(LDSCRIPT) $(TOOLCHAIN_DIR)/lib/libopencm3_stm32f4.a
$(Q)$(LD) -o $(OBJDIR)/$(BINARY).elf $(OBJDIR)/$(OBJS) -lopencm3_stm32f4 $(LDFLAGS)
%.o:%.c
$(Q)$(CC) $(CFLAGS) -o $(OBJDIR)/[email protected] -c $<
$(OBJDIR):
$(Q)mkdir $(OBJDIR)
clean:
$(Q)rm -rf $(OBJDIR)
.PHONY: images clean
명료화에 감사드립니다. 그것은 효과가 있었다. – robomon
질문이 하나 더 있습니다. 대답 해 주실 수 있겠습니까? 매번 make를 할 때마다 소스 파일이 변경되지 않아도 파일은 계속해서 컴파일됩니다. 내 이해에 따라 make는 변경된 파일 만 컴파일합니다. 우리가 make를 실행할 때 처음으로 16 진수 파일을 생성합니다. 그러나 다음에 우리가 달리면 "목표를 정하기위한 규칙 없음"이라는 경고가 나타납니다 (정확한 경고는 기억이 안납니다). 왜 보이지 않는지 아십니까? 내가 소스와 다른 폴더에 헥스를 작성했기 때문입니까? – robomon
정보가 없으면 무슨 일이 벌어 지는지 말하기가 어렵습니다. 다른 질문을 올리는 것을 고려하십시오, 그래서 당신은 예제 makefile 코드와 실행 기록을 가지고 이것을 살살 할 수 있습니다. – danfuzz