如何在makefile中搜索头文件并创建缺少的目录

如何在makefile中搜索头文件并创建缺少的目录,makefile,gnu,Makefile,Gnu,在我的项目中,我有目录结构/libs和/src。我想创建makefile,其中main在/libs中具有依赖关系。ie.头文件位于/libs中。我使用了以下方法 #Compiler to use CC=gcc #Compiler flags to use CFLAGS=-c -Wall BUILD = ./build SRC = ./src LIBS = ./libs SOURCES = $(SRC)/main.c $(SRC)/SmallComponent1.c $(SRC)/SmallC

在我的项目中,我有目录结构
/libs
/src
。我想创建
makefile
,其中
main
/libs
中具有依赖关系。ie.头文件位于
/libs
中。我使用了以下方法

#Compiler to use
CC=gcc
#Compiler flags to use
CFLAGS=-c -Wall

BUILD = ./build
SRC = ./src
LIBS = ./libs

SOURCES = $(SRC)/main.c $(SRC)/SmallComponent1.c $(SRC)/SmallComponent2.c $(LIBS)/ExtLib.c
OBJECTS = $(SOURCES: .c=.o)
EXECUTABLE = $(BUILD)/appl.exe
all: $(OBJECTS) $(EXECUTABLE)

$(BUILD):
    mkdir $(BUILD)

$(EXECUTABLE) : $(OBJECTS)
    $(CC) $(OBJECTS) -o $@ 
.c.o: 
    $(CC) $(CFLAGS) -I$(LIBS) $< -o $@





phony: clean
clean:
    rm $(BUILD)/*.o $(BUILD)/appl.exe
#要使用的编译器
CC=gcc
#要使用的编译器标志
CFLAGS=-c-墙
构建=/构建
SRC=./SRC
LIBS=./LIBS
SOURCES=$(SRC)/main.c$(SRC)/SmallComponent1.c$(SRC)/SmallComponent2.c$(LIBS)/ExtLib.c
对象=$(源:.c=.o)
可执行文件=$(生成)/appl.exe
所有:$(对象)$(可执行文件)
$(构建):
mkdir$(构建)
$(可执行文件):$(对象)
$(CC)$(对象)-o$@
.c.o.:
$(CC)$(CFLAGS)-I$(LIBS)$<-o$@
假的:干净的
清洁:
rm$(构建)/*.o$(构建)/appl.exe
问题是:如果不存在,如何创建
/build
?以及如何将外部
.h
包含在
$(CC)$(CFLAGS)-I$(LIBS)$<-o$@
中,因为
-I$(LIBS)
不工作,我得到以下错误
/src/main.c:4:20:致命错误:ExtLib.h:没有这样的文件或目录

要在需要之前创建生成目录,请使用(OOP)并使用
mkdir
-p
选项,以避免在错误已经存在的情况下获得错误(由于OOP,不应该需要该错误,但最好在Makefiles中使用此选项):


对于您的其他问题,我们需要更多信息;正如你所描述的,它是不可复制的。请尝试提供一个。

我无法重现您的错误。您使用的是哪个版本的Make?非常感谢您的帮助
$(BUILD):
    mkdir -p $@

$(EXECUTABLE) : $(OBJECTS) | $(BUILD)
    $(CC) $(OBJECTS) -o $@