簡體   English   中英

在 Makefile 中包含其他目錄

[英]Include additional directories to Makefile

我是一名學生,目前正在使用 Infineon XMC4700 uC,最近開始為某些硬件組件編寫小型“庫”。 出於這個原因,我為每個項目創建了一個目錄,並將相應的文件放入其中,以在單獨的 main.c 文件中測試每個組件。 只要 .h 和 .c 文件與實際的 main.c 文件位於同一目錄中,我就知道我必須在我的 Makefile 中更改什么。

但是,為了清晰和易於理解,我想將所有標題放在“src”目錄中,將所有 .c 文件放在目錄“inc”中。 比如當前目錄是這樣的

~/EigeneProgramme/XMC4700/ShiftRegister
                               |_build
                               |_inc
                               |  |_ project.h
                               |_src
                               |  |_ project.c
                               |_main.c
                               |_Makefile

但是,如果我這樣做,程序將不再編譯。 我的第一種方法是擴展 VPATH 變量以向編譯器顯示所需文件的路徑。

下面的代碼顯示了當前使用的 Makefile 中某些變量的聲明。

 CROSS_COMPILE=arm-none-eabi CC = $(CROSS_COMPILE)-gcc LD = $(CROSS_COMPILE)-gcc --specs=nosys.specs AR = $(CROSS_COMPILE)-ar AS = $(CROSS_COMPILE)-as OC = $(CROSS_COMPILE)-objcopy OD = $(CROSS_COMPILE)-objdump SZ = $(CROSS_COMPILE)-size ifeq ($(GDB_QUIET),true) DB = $(CROSS_COMPILE)-gdb -quiet else DB = $(CROSS_COMPILE)-gdb endif BUILDDIR = build LIB_BUILDDIR = lib_build USB_LIBDIR = $(XMC_LIBDIR)/ThirdPartyLibraries/USBlib/USB XMC_SERIES=4700 XMC_PACKAGE=F100 XMC_SIZE=2048 VPATH += $(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/BasicMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/CommonTables:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/ComplexMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/ControllerFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/FastMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/FilteringFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/MatrixFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/StatisticsFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/SupportFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/TransformFunctions:$(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Source:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/SRC:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/SRC/ARM:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/Templates:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/UserCodeTemplates:$(XMC_LIBDIR)/ThirdPartyLibraries/Newlib:$(XMC_LIBDIR)/XMCLib/src:$(USB_LIBDIR)/Class/Common:$(USB_LIBDIR)/Class/Device:$(USB_LIBDIR)/Common:$(USB_LIBDIR)/Core:$(USB_LIBDIR)/Core/XMC4000 CFLAGS = -I$(XMC_LIBDIR)/CMSIS/Include/ CFLAGS += -I$(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Include/ CFLAGS += -I$(XMC_LIBDIR)/XMCLib/inc/ CFLAGS += -I$(USB_LIBDIR) CFLAGS += -I$(USB_LIBDIR)/Class CFLAGS += -I$(USB_LIBDIR)/Class/Common CFLAGS += -I$(USB_LIBDIR)/Class/Device CFLAGS += -I$(USB_LIBDIR)/Common CFLAGS += -I$(USB_LIBDIR)/Core CFLAGS += -I$(USB_LIBDIR)/Core/XMC4000 CFLAGS += -DXMC$(XMC_SERIES)_$(XMC_PACKAGE)x$(XMC_SIZE) CFLAGS += -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mthumb CFLAGS += -g3 -gdwarf-2 CFLAGS += -c CFLAGS += -Wa,-adhlns="$@.lst" SFLAGS = $(CFLAGS) CFLAGS +=$(SCFLAGS) SFLAGS += -Wall CFLAGS += -Wall CFLAGS += -ffunction-sections SFLAGS += -x assembler-with-cpp LFLAGS = -T$(BUILDDIR)/$(LD_NAME).ld -nostartfiles LFLAGS += -L$(XMC_LIBDIR)/CMSIS/Lib/GCC/ LFLAGS += -Wl,-Map,"$@.map" LFLAGS += -mcpu=cortex-m4 -mthumb LFLAGS += -g3 -gdwarf-2 LIBSRCS += startup_XMC$(XMC_SERIES).c system_XMC$(XMC_SERIES).c LIBSRCS += syscalls.c OBJS = $(patsubst %.c,$(BUILDDIR)/%.o,$(SRCS)) LIBOBJS = $(patsubst %.c,$(LIB_BUILDDIR)/%.o,$(LIBSRCS))

不幸的是,我對 Makefile 不是很有經驗。 出於這個原因,我正在努力調整 Makefile 來編譯程序。

那么有人可以提供一個解決方案如何調整上面顯示的我當前 Makefile 的片段來編譯程序嗎?

此致

拉德巴爾德邁耶

您應該在CFLAGS添加-I_inc

CFLAGS += -I_inc

VPATH是另一種用法,主要用於在與源文件不同的目錄中生成目標文件。 在這種情況下,在_build 當 GNU Make 嘗試構建二進制文件時,比如說_build\\project.o ,它會在 VPATH 目錄列表中搜索所有project.c 然后它會編譯找到的第一個project.c並生成相應的project.o

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM