目录结构:

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 $@ # .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 嵌套的更多相关文章

  1. makefile学习笔记(多目录嵌套调用、变量使用)

    http://blog.csdn.net/leexiang_han/article/details/9274229   学习了几天的makefile的嵌套调用编写也有一些心得,先声明,我也是初学者写文 ...

  2. Makefile (3) 基本语法和使用

    make是用来管理一个工程项目的工具 . Makefile就是这个项目文件 . 1.Makefile 是由若干条规则组成的,每个规则的语法如下所示 : #规则 targets: prerequisit ...

  3. makefile--参数传递、条件判断、include (五)

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 在多个Makefile嵌套调用时,有时我们需要传递一些参数给下一层Makefile.比如我们在顶 ...

  4. 嵌入式linux第一阶段笔记

    1.虚拟网络编辑器(vm):三种模式:(VMnet0)桥接模式(vm和windows公用同个网络(同个物理端口)),(VMnet1)仅主机模式,(VMnet8)NAT模式(vm连接一个虚拟的路由(WA ...

  5. makefile详解 嵌套执行make,定义命令包

    嵌套执行make 在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而 ...

  6. 从头開始写项目Makefile(五):嵌套运行

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在大一些的项目里面,全部源码不会仅仅放在同一个文件夹,一般各个功 ...

  7. Makefile之嵌套执行make

    1.在Makefile中 一般使用一个总控Makefile来指明文件的编译规则 如: subsystem: cd subdir && $(MAKE) 其等价于 subsystem: $ ...

  8. 怎么写makefile?(转)

    跟我一起写 Makefile 陈皓 第一章.概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 pr ...

  9. 【转】Linux makefile 教程 非常详细,且易懂

    From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

随机推荐

  1. Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)

    Problem   Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...

  2. 求导程序编写(oo-java编程)

    本单元的任务为求导. 即将一个含自变量x的多项式F求导成为另外一个含自变量x的多项式f.使得 dF/dx = f 为降低我们的难度,这个任务被分解成了三个阶段: (1)对幂函数进行求导(不允许嵌套) ...

  3. Neutron Vlan Network 学习

    vlan network 是带 tag 的网络,是实际应用最广泛的网络类型.    下图是 vlan100 网络的示例.   1. 三个 instance 通过 TAP 设备连接到名为 brqXXXX ...

  4. 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!

    一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...

  5. 使用python对py文件程序代码复用度检查

    #!/user/bin/env python # @Time :2018/6/5 14:58 # @Author :PGIDYSQ #@File :PyCheck.py from os.path im ...

  6. 小米Play获取ROOT权限的经验

    小米Play通过什么方式开通了Root权限?大家知道,android机器有Root权限,一旦手机开通了root相关权限,就能够实现更多的功能,举个栗子大家企业的营销部门,使用一些营销应用都需要在Roo ...

  7. 聊聊 Scala 的伴生对象及其意义

    2019-04-22 关键字:Scala 伴生对象的作用 关于 Scala 伴生对象,比教材更详细的解释. 什么是伴生对象? 教材中关于伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态 ...

  8. js 调用打印机方法

    <button onclick="localdy({php echo $item['order']['id'];})" class="btn btn-xs orde ...

  9. docker上传自己的镜像

    https://blog.csdn.net/boonya/article/details/74906927 需要注意的就是命名规范 docker push 注册用户名/镜像名

  10. docker添加阿里云专属镜像

    阿里云镜像地址:https://link.zhihu.com/?target=https%3A//cr.console.aliyun.com/%23/accelerator 根据提示开启容器镜像服务, ...