编译的目录结构如下
├── bin
│ └── myapp
├── f1
│ ├── f1.c
│ └── Makefile
├── f2
│ ├── f2.c
│ ├── f3.c
│ └── Makefile
├── include
│ └── myinclude.h
├── lib
│ └── libXXX.so
├── main
│ ├── main.c
│ └── Makefile
├── Makefile //根目录下makefile
└── obj
├── f1.o
├── f2.o
├── f3.o
├── main.o
└── Makefile
各级Makefile源码
根目录下makefile
CC = gcc
SUBDIRS = f1 f2 main obj
C_FLAGS := -std=c++11 -Wall -Wextra -g
C_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4 -ffunction-sections -mno-unaligned-access -fno-aggressive-loop-optimizations
BIN = myapp
OBJS_DIR = obj
BIN_DIR = bin
LIB = ../lib
INCLUDE = ../include
SDL_LIB = ../lib/SDL
SDL_INC = ../include/SDL
LIBRARIES = -lpthread -lm -ldl
HISI_LIBRARIES := $(LIB)/libxxx.a
export CC BIN OBJS_DIR BIN_DIR LIB INCLUDE SDL_LIB SDL_INC
all:CHECK_DIR $(SUBDIRS)
CHECK_DIR:
mkdir -p $(BIN_DIR)
$(SUBDIRS):ECHO
make -C $@
ECHO:
@echo $(SUBDIRS)
@echo begin compile
clean:
@$(RM) $(OBJS_DIR)/*.o
@rm -rf $(BIN_DIR)
obj过程文件目录下makefile
OBJS = $(wildcard *.o)
../$(BIN_DIR)/$(BIN): $(OBJS)
$(CC) $(C_FLAGS) -L$(LIB) -o $@ $^
源码子目录f1 f2 main目录下makefile
SRC = ${wildcard *.c}
OBJS = ${patsubst %.c,%.o,$(SRC)}
all:$(OBJS)
mv $(OBJS) ../$(OBJS_DIR)/
$(OBJS):%.o:%.c
$(CC) $(C_FLAGS) -I$(INCLUDE) -I$(SDL_INC) -L$(LIB) -c -o $@ $< $(LIBRARIES) $(HISI_LIBRARIES)
编译过程文件obj部分makefile
SRC = ${wildcard *.cpp}
OBJS = ${patsubst %.cpp,%.o,$(SRC)}
all:$(OBJS)
mv $(OBJS) ../$(OBJS_DIR)/
$(OBJS):%.o:%.cpp
$(CC) $(C_FLAGS) -I$(INCLUDE) -I$(SDL_INC) -L$(LIB) -c -o $@ $< $(LIBRARIES) $(HISI_LIBRARIES)
源码部分
main.c
#include <stdio.h>
#include "myinclude.h"
int main(void)
{
print1();
print2();
print3();
return 0;
}
f1.c
#include "myinclude.h"
void print1()
{
printf("msg from f1.c...\n");
return;
}
f2.c
#include "myinclude.h"
void print2()
{
printf("msg from f2.c...\n");
return;
}
f3.c
#include "myinclude.h"
void print3()
{
printf("msg from f3.c...\n");
return;
}