${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 鏈接
- 參數(shù)r:在庫中插入模塊(替換)镊讼。當插入的模塊名已經(jīng)在庫中存在洗搂,則替換同名的模塊烤咧。如果若干模塊中有一個模塊在庫中不存在腹暖,ar顯示一個錯誤消息,并不替換其他同名模塊铡恕。默認的情況下琢感,新的成員增加在庫的結尾處,可以使用其他任選項來改變增加的位置探熔。
- 參數(shù)c:創(chuàng)建一個庫驹针。不管庫是否存在,都將創(chuàng)建诀艰。
- 參數(shù)s:創(chuàng)建目標文件索引柬甥,這在創(chuàng)建較大的庫時能加快時間饮六。(補充:如果不需要創(chuàng)建索引,可改成大寫S參數(shù)苛蒲;如果.a文件缺少索引卤橄,可以使用ranlib命令添加)
函數(shù)wildcard
: 但在變量的定義和函數(shù)引用時,通配符將失效臂外,使用該函數(shù)讓通配符展開窟扑。鏈接
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中對系統(tǒng)環(huán)境變量進行重新賦值漏健,比如上面代碼中規(guī)定CC和AR禁止被重新賦值嚎货。
2、make -C $(MBEDTLS_PATH) lib -e CC=$(PLATFORM_CC) AR=$(PLATFORM_AR)
- 這段代碼的意思是在MBEDTLS_PATH路徑下執(zhí)行該路徑的Makefile文件的
lib
目標蔫浆,執(zhí)行過程中殖属,系統(tǒng)環(huán)境變量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: 顯示警告信息橡卤,使用這個參數(shù)會在編譯時顯示更多的警告信息扮念。這個參數(shù)很有用,特別是找不到libs/header之類的問題碧库。參考
- -O:表示最佳優(yōu)化的程度柜与。-O默認值是-O1,你可以指定成-O2或-O3嵌灰,數(shù)字越大表示最佳優(yōu)化程度越高弄匕,但是也會增加編譯的時間沽瞭。
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 $@
- $^ : 指代所有前置條件城丧,之間以空格分隔。比如豌鹤,規(guī)則為 t: p1 p2亡哄,那么 $^ 就指代 p1 p2 。
- $@ : $@指代當前目標布疙,就是Make命令當前構建的那個目標, 這里就是${objects}蚊惯。參考