makefile 嵌套

Posted hzijone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile 嵌套相关的知识,希望对你有一定的参考价值。

 

目录结构:

技术分享图片

 

dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库,   main.c 主文件链接加法功能,  终端命令执行:   make dynamic=1  则编译动态库进行链接 ,   make 静态库编译

动态库的makefile内容:

# CROSS_COMPILE := 
# CC := $(CROSS_COMPILE)gcc
# CPP := $(CROSS_COMPILE)g++

TARGET := libadd.so
OBJ := sub.o
SRCS = $(wildcard *.c)

all:
	$(CC) -c -o $(OBJ) -fPIC $(SRCS)
	$(CC) -shared -fPIC -o $(TARGET)  $(OBJ)


.PHONY : clean
clean:
	rm $(OBJ) $(TARGET) -f

 静态库makefile内容:

# CROSS_COMPILE := 
# CC := $(CROSS_COMPILE)gcc
# CPP := $(CROSS_COMPILE)g++
# AR := $(CROSS_COMPILE)ar

TARGET := libadd.a
OBJ := sub.o
SRCS = $(wildcard *.c)

all:
	$(CC) -c -o $(OBJ)  $(SRCS)
	$(AR) -rcs -o $(TARGET)  $(OBJ)


.PHONY : clean
clean:
	rm $(OBJ) $(TARGET) -f

  

根目录的makefile内容:

CROSS_COMPILE := 
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)AR
CPP = $(CROSS_COMPILE)g++
LD = $(CROSS_COMPILE)ld
NM = $(CROSS_COMILE)nm

STRIP = $(CROSS_COMPILE)strip
OBJDUMP = $(CROSS_COMPILE)objdump
OBJCOPY = $(CROSS_COMPILE)objcopy



ifndef dynamic
LIBPATH := static
else
LIBPATH := dynamic
endif


CFLAGS := -Wall -O2 -g 
CFLAGS += -I $(shell pwd)/$(LIBPATH) 

LDFLAGS := -lm -L$(LIBPATH) -ladd


TOPDIR := $(shell pwd)

SRCS = $(wildcard *.c)


TARGET := main
OBJ := main.o

all:$(TARGET)
# $(TARGET):    这种方式不会自动推导调用 %.o:%.c 这个内容
$(TARGET):$(OBJ)
	make -C $(LIBPATH)
	$(CC) $(OBJ) $(CFLAGS) $(LDFLAGS) -o $(TARGET)
#  这样放会出现找不到链接库的问题,源文件要放在链接库前面
# $(CC)  $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(SRCS)  

%.o:%.c
	$(CC) -c $(CFLAGS)  $^ -o [email protected]



# .PHONY是一个伪目标,可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突
.PHONY : clean
clean:
	make -C $(LIBPATH) clean
	rm $(OBJ) $(TARGET) -f

  

 源码下载路径: https://download.csdn.net/download/aba13579/10777167

 

参考链接: https://blog.csdn.net/qq_21792169/article/details/50448639

以上是关于makefile 嵌套的主要内容,如果未能解决你的问题,请参考以下文章

Android 动画嵌套片段

从头開始写项目Makefile:嵌套运行

makefile 嵌套

Makefile

Recyclerview 滚动在嵌套滚动视图中的片段中不起作用

makefile中的Cflags用法