gpt4 book ai didi

c - 在自动生成的 makefile 中包含 C 头文件的问题

转载 作者:行者123 更新时间:2023-12-04 04:06:53 34 4
gpt4 key购买 nike

我已经开始在基于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

很明显,我的“解决方案”是 Not Acceptable 。因此,我想请教您如何正确解决此问题的建议。提前感谢您的任何建议。

最佳答案

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

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

如果是托管的 make 项目:

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

如果是标准的make工程:

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

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

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

参见 this documentation获取更多详细信息、屏幕截图等。

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

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

关于c - 在自动生成的 makefile 中包含 C 头文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62327348/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com