${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
目标,执行过程中,系统环境变量CC
和AR
禁止被再次赋值。
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 $@
- $^ : 指代所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,那么 $^ 就指代 p1 p2 。
- $@ : $@指代当前目标,就是Make命令当前构建的那个目标, 这里就是${objects}。参考