linux - IAR 的生成文件。源列表

标签 linux makefile stm32 iar

我的 Makefile 中有变量:

SRCP = \
 main.c \
 lib1/src/file1.c \
 lib2/src/file2.c

文件夹 lib1/srclib2/src 可能包含其他来源,但我只需要编译 SRCP var 中的文件。

我知道一种变体:

OBJ_DIR = ./Release/Obj
OBJ = $(SRC:.c=.o)
$(OBJ): $(SRCP)
    for source in $(SRCP); do \
        $(CC) $(CLAGS) -c $$source -o $(OBJ_DIR)/$@; \
    done

但没有提供信息。在控制台中,我看到 $source 而不是 main.c (或任何名称)。

我的 makefile 有错误:

.PHONY: all clean

PROJECT = hello

IAR_TARGET = ./Release
EXE_DIR = $(IAR_TARGET)/Exe
OBJ_DIR = $(IAR_TARGET)/Obj

COMPILE_OPTS = -mcpu=cortex-m3 -mthumb -Wall -g -O0
INCLUDE_DIRS = -I . \
 -I lib/inc

SRCP = \
 main.c \
 lib/src/stm32f10x_tim.c \
 lib/src/stm32f10x_adc.c

LIB = -L ./lib/src

SRC := $(notdir $(SRCP))

OBJ_FILES := $(addprefix $(OBJ_DIR)/,$(notdir $(SRCP:.c=.o)))

CC = arm-none-eabi-gcc
CFLAGS = $(COMPILE_OPTS) $(INCLUDE_DIRS)

# mkdir -p $(EXE_DIR) $(OBJ_DIR)
all: $(EXE_DIR)/$(PROJECT).elf

# Linker invocation
$(EXE_DIR)/$(PROJECT).elf: $(OBJ_FILES)
    $(CC) $(CFLAGS) $(OBJ_FILES) -o $(EXE_DIR)/$(PROJECT).elf

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

clean:
    rm -rf $(IAR_TARGET)

错误:制作:***没有规则制作目标“Release/Obj/main.o”,“Release/Exe/hello.elf”需要。停止。

您知道的正确版本是什么?

最佳答案

我对 IAR 项目没有任何具体经验。但我想我可以帮助您处理 Makefile。

我建议的主要变化是:

  • 更改 OBJ_FILES 的定义,使其包含具有正确路径名的目标文件列表,例如./Release/Obj/file1.onotdir 删除目录,addprefix 添加新目录。

  • 添加如何将.c 文件转换为.o 文件的模式规则。由于目标文件是最终文件(本例中为 .elf 文件)的依赖项,并且没有明确的规则来构建这些目标文件,make 将使用构建它们的模式规则。

这个 makefile 很可能需要 GNU make。

SRCP = \
  main.c \
  lib/src/stm32f10x_tim.c \
  lib/src/stm32f10x_adc.c

OBJ_DIR = ./Release/Obj
OBJ_FILES := $(addprefix $(OBJ_DIR)/,$(notdir $(SRCP:.c=.o)))

# Linker invocation
$(OUTPUT_DIR)/$(PROJECT).elf: $(OBJ_FILES)
    $(CC) $(LDFLAGS) $(OBJ_FILES) $(STD_LIBS) -o $(OUTPUT_DIR)/$(PROJECT).elf

# Rules
$(OBJDIR)/%.o: ./%.c
    $(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: lib/src/%.c
    $(CC) $(CFLAGS) -c $< -o $@

关于linux - IAR 的生成文件。源列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130647/

相关文章:

stm32 DMA cannot send data to SPI1 DR(无法使用DMA向SPI发送数据)

linux - 将 celery 设置为守护进程服务时出现问题

php - 在 PHP 中获取内核结构大小的可靠方法

linux - UNIX `time` 命令对于基准测试是否足够准确?

c - 在 C 中以编程方式读取文件描述符表

string - 以字符串形式接收数字(uart)

c - 未找到 flycheck 头文件,但 makefile 是正确的

linux - 如何在 makefile 中输出 shell 脚本的结果?

c++ - 如何在没有任何断言的情况下构建 imagemagick

c - STM32中const char和char指针在内存中是如何表示的