如何编写多文件夹makefile

如何编写多文件夹makefile,makefile,Makefile,我需要一个Makefile可以用来构建具有这种结构的项目: 多个源文件夹。 输出目录中的所有对象。 对象和依赖项文件的多个对应目标文件夹 │─inc └─src │ ├─lib1 │ │ ├─inc │ │ └─src │ ├─lib2 │ │ ├─inc │ │ └─src │ └─main.c │ └─output └─src ├─lib1 │ └─src │ ├─ lib1_

我需要一个Makefile可以用来构建具有这种结构的项目:
多个源文件夹。 输出目录中的所有对象。
对象和依赖项文件的多个对应目标文件夹

│─inc
└─src
│  ├─lib1
│  │  ├─inc
│  │  └─src
│  ├─lib2
│  │  ├─inc
│  │  └─src
│  └─main.c
│
└─output
       └─src
           ├─lib1
           │  └─src
           │       ├─ lib1_file1.o
           │       └─ lib1_file2.o
           ├─lib2
           │  └─src
           │       ├─ lib2_file1.o
           │       └─ lib2_file2.o
           └─main.o
我试过这个,但没用

LIBNAME=libhello.a
OUTDIR=output

CC = gcc
CFLAGS = -Wall -MD -O2 -c

LFLAGS = 
INCS =    -Iinc         \
         -Isrc/lib1/inc \
         -Isrc/lib2/inc

SOURCES = src/main.c            \
          src/lib1/lib1_file1.c \
          src/lib1/lib1_file2.c \
          src/lib2/lib2_file1.c \
          src/lib2/lib2_file2.c

OBJS=$(SOURCES:%.c=${OUTDIR}/%.o)

all: ${LIBNAME}

${LIBNAME}: ${OBJS}
    ar crs ${OUTDIR}/$@ $^

.PYONY: clean
clean:
    @rm -rf ${OUTDIR}

${OUTDIR}/%.o:%.c
    @mkdir -p $(@D)
    @${CC} ${CFLAGS} ${INCS} $< -o $@ ${LFLAGS}

LIBNAME=libhello.a
OUTDIR=输出
CC=gcc
CFLAGS=-Wall-MD-O2-c
LFLAGS=
INCS=-Iinc\
-Isrc/lib1/inc\
-Isrc/lib2/inc
SOURCES=src/main.c\
src/lib1/lib1_file1.c\
src/lib1/lib1_file2.c\
src/lib2/lib2_file1.c\
src/lib2/lib2_file2.c
OBJS=$(来源:%.c=${OUTDIR}/%.o)
全部:${LIBNAME}
${LIBNAME}:${OBJS}
ar crs${OUTDIR}/$@$^
派奥尼:干净
清洁:
@rm-rf${OUTDIR}
${OUTDIR}/%.o:%.c
@mkdir-p$(@D)
@${CC}${CFLAGS}${INCS}$<-o$@${LFLAGS}

如果您为makefile提供正确的源路径,它将正常工作。你给它这个:

SOURCES = ... src/lib1/lib1_file1.c ...
但目录结构中的实际路径是:

SOURCES = ... src/lib1/src/lib1_file1.c ...

请具体说明哪些不起作用,即预期和实际输出是什么。