美文网首页
Makefile学习笔记

Makefile学习笔记

作者: 806349745123 | 来源:发表于2017-09-30 17:05 被阅读30次
${LIB_STATIC}: libs ${objects}
    $(AR) rcs $@ $(objects) $(BUILD_OUT_PATH)*.o 
    -rm ${objects}
    -rm -rf ${BUILD_OUT_PATH}

格式:ar rcs libxxx.a xx1.o xx2.o 链接

  • 参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
  • 参数c:创建一个库。不管库是否存在,都将创建。
  • 参数s:创建目标文件索引,这在创建较大的库时能加快时间。(补充:如果不需要创建索引,可改成大写S参数;如果.a文件缺少索引,可以使用ranlib命令添加)

函数wildcard: 但在变量的定义和函数引用时,通配符将失效,使用该函数让通配符展开。链接


make -C $(MBEDTLS_PATH) lib -e CC=$(PLATFORM_CC) AR=$(PLATFORM_AR)
cp -RP $(TLS_LIB_DIR)libmbedtls.*   $(BUILD_OUT_PATH)
cp -RP $(TLS_LIB_DIR)libmbedx509.*  $(BUILD_OUT_PATH)
cp -RP $(TLS_LIB_DIR)libmbedcrypto.* $(BUILD_OUT_PATH)
cd $(BUILD_OUT_PATH) && $(AR) x libmbedtls.a
cd $(BUILD_OUT_PATH) && $(AR) x libmbedx509.a
cd $(BUILD_OUT_PATH) && $(AR) x libmbedcrypto.a

1、-e或者--environment-override: 不允许在Makefile中对系统环境变量进行重新赋值,比如上面代码中规定CC和AR禁止被重新赋值。

2、make -C $(MBEDTLS_PATH) lib -e CC=$(PLATFORM_CC) AR=$(PLATFORM_AR)

  • 这段代码的意思是在MBEDTLS_PATH路径下执行该路径的Makefile文件的lib目标,执行过程中,系统环境变量CCAR禁止被再次赋值。

3、cp -RP $(TLS_LIB_DIR)libmbedtls.* $(BUILD_OUT_PATH)

  • cp -RP: -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;-p:保留源文件或目录的属性;该代码会将TLS_LIB_DIR目录前缀为libmbedtls的文件拷贝到BUILD_OUT_PATH路径下并且会保留源文件。链接

CFLAGS += -Wall -O2 ${INCLUDE_DIRS}
  • -Wall: 显示警告信息,使用这个参数会在编译时显示更多的警告信息。这个参数很有用,特别是找不到libs/header之类的问题。参考
  • -O:表示最佳优化的程度。-O默认值是-O1,你可以指定成-O2或-O3,数字越大表示最佳优化程度越高,但是也会增加编译的时间。
CFLAGS += -DSTD_OUT
  • -DSTD_OUT = #define STD_OUT 1参考
CFLAGS += -DIOT_SDK_TRACE
  • 同上,如果工程中有.h或者.c含有下列代码,则会打印字符defined

    #ifdef IOT_SDK_TRACE
        printf("defined");
    #endif
    

${objects}:%.o:%.c
    $(CC) $(CFLAGS) -c $^ -o $@
  1. $^ : 指代所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,那么 $^ 就指代 p1 p2 。
  2. $@ : $@指代当前目标,就是Make命令当前构建的那个目标, 这里就是${objects}。参考

相关文章

  • Makefile学习笔记

    Makefile学习笔记 学习Makefile的资料 《跟我一起写makefile》 《GUN make manu...

  • Makefile自动化变量

    学习笔记,摘自陈皓的《跟我一起写 Makefile》 Makefile规则 Makefile文件由一系列规则构成。...

  • Makefile学习笔记

    Makefile学习笔记 概述 什么是makefile?或许很多Windows程序员都不知道这个东西,因为那些Wi...

  • Makefile学习笔记

    格式:ar rcs libxxx.a xx1.o xx2.o 链接 参数r:在库中插入模块(替换)。当插入的模块...

  • Makefile 学习笔记

    1.命令前的-号表示命令执行失败后继续执行接下来的操作。 2.环境变量中MAKEFIELmake指令会把环境变量中...

  • Makefile学习笔记

    1. 概述 1.1 前言 之前在Linux下写C/C++都是直接输命令行,虽然有使用make的经历,但没有自己动手...

  • Makefile使用(学习笔记)

    makefile的规则 组成 target prerequisites commandtarget这一个或多个的目...

  • Makefile学习笔记——3.Makefile规则

    1.前言 在Makefile中,规则描述了用什么命令生成一个文件,该文件被称为规则的目标,生成"目标"的方式就是规...

  • Makefile学习笔记——2.Makefile介绍

    1. Makefile的内容 一个完整的 Makefile 中,包含了 5 个东西:显式规则、隐含规则、变量定义、...

  • Makefile笔记

    Makefile 笔记 一、简单的 Makefile 例子 文档目录结构文档目录结构是用户目录HOME下有src ...

网友评论

      本文标题:Makefile学习笔记

      本文链接:https://www.haomeiwen.com/subject/gchnextx.html