Почему утилита make не может найти файл заголовка? - PullRequest
0 голосов
/ 17 июня 2020

Я работал в IDE на основе Eclipse под названием Vitis (IDE от Xilinx). У меня есть автоматически созданный программный проект, содержащий три автоматически созданных файла Makefile. Организация проекта следующая:

zynq_fsbl
-Makefile_level_01
-main.c
-zynq_fsbl_bsp
 -Makefile_level_02
 -ps7_cortexa9_0
  -code
  -include
   -Config.h
  -lib
  -libsrc
   -peripheral_01
    -src
     -driver_peripheral_01.c
     -driver_peripheral_01.h
     -Makefile_level_03_01
   -peripheral_02
    -src
     -driver_peripheral_02.c
     -driver_peripheral_02.h
     -Makefile_level_03_02
   - ... same pattern repeats for other perpherals

Makefile_level_01 содержит:

# Auto Generated by Xilinx generate_app. Modify at your own risk

CC := arm-none-eabi-gcc
CC_FLAGS := -MMD -MP       -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard 
CFLAGS := 
LN_FLAGS :=  -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -Wl,-build-id=none -specs=Xilinx.spec  -lrsa -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilffs,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lrsa,-lxil,-lgcc,-lc,--end-group                                      -Wl,--gc-sections

c_SOURCES := $(wildcard *.c)
S_SOURCES := $(wildcard *.S)
INCLUDES := $(wildcard *.h)
OBJS := $(patsubst %.c, %.o, $(c_SOURCES))
OBJS += $(patsubst %.S, %.o, $(S_SOURCES))
LSCRIPT := -Tlscript.ld

CURRENT_DIR = $(shell pwd)
DEPFILES := $(patsubst %.o, %.d, $(OBJS))
LIBS := zynq_fsbl_bsp/ps7_cortexa9_0/lib/libxil.a
EXEC := executable.elf

INCLUDEPATH := -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
LIBPATH := -Lzynq_fsbl_bsp/ps7_cortexa9_0/lib -L./

all: $(EXEC)

$(EXEC): $(LIBS) $(OBJS) $(INCLUDES)
    $(CC) -o $@ $(OBJS) $(CC_FLAGS) $(CFLAGS) $(LN_FLAGS) $(LIBPATH) $(LSCRIPT)

$(LIBS):
    $(MAKE) -C zynq_fsbl_bsp

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

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

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

clean:
    rm -rf $(OBJS) $(LIBS) $(EXEC) *.o

-include $(DEPFILES)

Makefile_level_02 содержит:

# Makefile generated by Xilinx.

PROCESSOR = ps7_cortexa9_0
LIBRARIES = ${PROCESSOR}/lib/libxil.a
BSP_MAKEFILES := $(wildcard $(PROCESSOR)/libsrc/*/src/Makefile)
SUBDIRS := $(patsubst %/Makefile, %, $(BSP_MAKEFILES))

ifneq (,$(findstring win,$(RDI_PLATFORM)))
 SHELL = CMD
endif

all: libs
    @echo 'Finished building libraries'

include: $(addsuffix /make.include,$(SUBDIRS))

libs: $(addsuffix /make.libs,$(SUBDIRS))

clean: $(addsuffix /make.clean,$(SUBDIRS))

$(PROCESSOR)/lib/libxil.a: $(PROCESSOR)/lib/libxil_init.a
    cp -f $< $@

%/make.include: $(if $(wildcard $(PROCESSOR)/lib/libxil_init.a),$(PROCESSOR)/lib/libxil.a,)
    @echo "Running Make include in $(subst /make.include,,$@)"
    $(MAKE) -C $(subst /make.include,,$@) -s include  "SHELL=$(SHELL)" "COMPILER=arm-none-eabi-gcc" "ASSEMBLER=arm-none-eabi-as" "ARCHIVER=arm-none-eabi-ar" "COMPILER_FLAGS=  -O2 -c" "EXTRA_COMPILER_FLAGS=-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -nostartfiles -g -Wall -Wextra"

%/make.libs: include
    @echo "Running Make libs in $(subst /make.libs,,$@)"
    $(MAKE) -C $(subst /make.libs,,$@) -s libs  "SHELL=$(SHELL)" "COMPILER=arm-none-eabi-gcc" "ASSEMBLER=arm-none-eabi-as" "ARCHIVER=arm-none-eabi-ar" "COMPILER_FLAGS=  -O2 -c" "EXTRA_COMPILER_FLAGS=-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -nostartfiles -g -Wall -Wextra"

%/make.clean: 
    $(MAKE) -C $(subst /make.clean,,$@) -s clean 
clean:
    rm -f ${PROCESSOR}/lib/libxil.a

Makefile_level_03 для периферийного_01 содержит:

COMPILER=
ARCHIVER=
CP=cp
COMPILER_FLAGS=
EXTRA_COMPILER_FLAGS=
LIB=libxil.a
LEVEL=0

RELEASEDIR=../../../lib
INCLUDEDIR=../../../include
INCLUDES=-I./. -I${INCLUDEDIR}

INCLUDEFILES=*.h
LIBSOURCES=*.c

OUTS = *.o

libs:
    echo "Compiling driver_peripheral_01 ..."
    $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
    $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS}
    make clean

include:
    ${CP} $(INCLUDEFILES) $(INCLUDEDIR)

clean:
    rm -rf ${OUTS}

Моя проблема в том, что я не могу скомпилировать модуль driver_peripheral_01.c из-за проблемы с включением файла заголовка Config.h. Вызывается "fatal error: Config.h: No such file or directory", несмотря на то, что я скопировал рассматриваемый файл заголовка в подкаталог include в структуре каталогов проекта. Кто-нибудь знает, почему make не может найти заголовочный файл Config.h? Спасибо за любые предложения.

...