繁体   English   中英

使用自动生成的 C header 文件包含问题 makefile

[英]Problems with inclusion of C header file with automatically generated makefile

我已经开始在基于Eclipse的Xilinx Vitis IDE开发C语言软件。 我的项目组织如下:

-Application
-Drivers
 -drivers
  -Adc
  -Pwm
   -Pwm.c
   -Pwm.h
-Utils
 -Bits.h
 -Maths.h

所有目录,即应用程序、驱动程序和实用程序都通过“链接文件夹”选项链接到工作区。 我能够将Bits.h包含到Pwm.c中的唯一方法是在我的磁盘上指定 Bits.h 的完整路径。 否则编译器报fatal error: Bits.h: No such file or directory 编译过程由自动生成的 makefile 管理,内容如下:

# 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 -g3 -O0"

%/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 -g3 -O0"

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

很明显,我的“解决方案”是不可接受的。 因此,我想请教您如何正确解决此问题的建议。 在此先感谢您的任何建议。

您可以向项目添加包含路径。 这些是编译器将在其中搜索包含文件的路径。 应该找到位于包含路径列表中的一个目录中的任何包含文件; 包含文件时无需指定其路径。

如何在 Xilinx 环境中执行此操作似乎取决于项目的设置方式。

如果是托管 make 项目:

属性 -> C/C++ 构建在“工具设置”选项卡 select 中的“包含路径”

如果是标准的make项目:

属性->C/C++ 包含路径和符号>

然后“添加外部包含路径”

如果它让您可以选择将路径添加为绝对路径或相对路径,请选择相对路径; 这允许另一个用户将具有相同内部目录结构的项目放在硬盘驱动器上的不同位置,这正是您想要的。 在我引用的文档的屏幕截图中,路径是相对的。

有关详细信息、屏幕截图等,请参阅此文档

注意:我是根据文档回答的; 我自己没有使用过这个 IDE。

另请注意,您可以在#include 指令中使用相对路径,但它们不一定相对于包含它们的文件的位置。 它们更有可能与项目的根相关(基本上,在任何有效运行“make”的地方)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM