日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

android开发笔记之Makefile(一)

發布時間:2023/12/4 综合教程 48 生活家
生活随笔 收集整理的這篇文章主要介紹了 android开发笔记之Makefile(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指定編譯文件

指定特定的Makefile,你可以使用make的“-f”和“–file”參數,如:make -f Make.Linux或make –file Make.AIX

?

?make -f test.mk1

有這個命令后,我們就可以調試我們的命令了。

?

注釋

Makefile中,“#”是注釋符

?

# -------------------------------------------------------------
#???????????????????? START
# -------------------------------------------------------------123

?

變量

變量的定義:在Makefile中我們要定義一系列的變量,變量一般都是字符串,這個有點你C語言中的宏,當Makefile被執行時,其中的變量都會被擴展到相應的引用位置上。

變量是大小寫敏感的,“foo”、“Foo”和“FOO”是三個不同的變量名。傳統的Makefile的變量名是全大寫的命名方式,但我推薦使用大小寫搭配的變量名,如:MakeFlags。這樣可以避免和系統的變量沖突,而發生意外的事情。有一些變量是很奇怪字串,如“<”、“ <”、“<”、“@”等,這些是自動化變量,我會在后面介紹。

?

變量基礎

變量在聲明時需要給予初值,而在使用時,需要給在變量名前加上“$”符號,但最好用小括號“()”或是大括號“{}”把變量給包括起來。如果你要使用真實的“$”字符,那么你需要用“$$”來表示。

以下是依賴或定義的變量列表,可以定義其他變量為自己使用,但是NDK編譯系統保留下列變量名:

以 LOCAL_開頭的名字(例如 LOCAL_MODULE)?
以 PRIVATE_, NDK_ 或 APP_開頭的名字(內部使用)
小寫名字(內部使用,例如‘my-dir’)

如果為了方便在 Android.mk 中定義自己的變量,建議使用 MY_前綴:

?

#-----------------start----------------
my_value = hello
$(warning ----my_value:$(my_value))
#-----------------end----------------1234

輸出:

?

test.mk:4: ----my_value:hello1

注意:?
‘:=’是賦值的意思;’+=’是追加的意思;‘$’表示引用某變量的值

?

變量中的變量

在定義變量的值時,我們可以使用其它變量來構造變量的值,在Makefile中有兩種方式來在用變量定義變量的值。
先看第一種方式,也就是簡單的使用“=”號,在“=”左側是變量,右側是變量的值,右側變量的值可以定義在文件的任何一處,也就是說,右側中的變量不一定非要是已定義好的值,其也可以使用后面定義的值。如:

?

#-----------------start----------------
foo = $(bar)
bar = $(ugh)
ugh = Huh

$(warning -----foo:$(foo))
#-----------------end----------------1234567

輸出:

?

test.mk:6: -----foo:Huh1

可見,變量是可以使用后面的變量來定義的,這個功能有好的地方,也有不好的地方,好的地方是,我們可以把變量的真實值推到后面來定義,但這種形式也有不好的地方,那就是遞歸定義,如:

?

A = $(B)
B = $(A)12

這會讓make陷入無限的變量展開過程中去,當然,我們的make是有能力檢測這樣的定義,并會報錯。還有就是如果在變量中使用函數,那么,這種方式會讓我們的make運行時非常慢,更糟糕的是,他會使用得兩個make的函數“wildcard”和“shell”發生不可預知的錯誤。因為你不會知道這兩個函數會被調用多少次。

為了避免上面的這種方法,我們可以使用make中的另一種用變量來定義變量的方法。這種方法使用的是“:=”操作符

?

冒號等于操作符–”:=“

這種方法,前面的變量不能使用后面的變量,只能使用前面已定義好了的變量。

?

#-----------------start----------------
x := foo
y := $(x) bar
x := later

$(warning -----y:$(y))
$(warning -----x:$(x))

y_02 := $(x_02) bar
x_02 := foo
$(warning -----y_02:$(y_02))
$(warning -----x_02:$(x_02))
#-----------------end----------------12345678910111213

輸出:

?

test.mk:6: -----y:foo bar
test.mk:7: -----x:later
test.mk:11: -----y_02: bar
test.mk:12: -----x_02:foo1234

?

問等于操作符–“?=”

還有一個比較有用的操作符是“?=”,先看示例:

?

FOO ?= bar1

其含義是,如果FOO沒有被定義過,那么變量FOO的值就是“bar”,如果FOO先前被定義過,那么這條語將什么也不做,其等價于:

?

ifeq ($(origin FOO), undefined)
FOO = bar
endif123

?

#-----------------start----------------
x ?= test
$(warning -----x:$(x))
x=hello
x ?= 100
$(warning -----x:$(x))
#-----------------end----------------1234567

輸出:

?

test.mk:3: -----x:test
test.mk:6: -----x:hello12

?

變量值的替換

?

$(var:a=b)
${var:a=b}12

替換變量中的共有的部分,其意思是,把變量“var”中所有以“a”字串“結尾”的“a”替換成“b”字串。這里的“結尾”意思是“空格”或是“結束符”。

?

#-----------------start----------------
var=a.o b.o c.o
bar=$(var:.o=.t)
$(warning -----bar:$(bar))
#-----------------end----------------12345

輸出:

?

test.mk:4: -----bar:a.t b.t c.t1

?

變量替換的技術–“靜態模式”

這依賴于被替換字串中的有相同的模式,模式中必須包含一個“%”字符

?

#-----------------start----------------
var=a.o b.o c.o
bar=$(var:%.o=%.t)
$(warning -----bar:$(bar))
#-----------------end----------------12345

輸出:

?

test.mk:4: -----bar:a.t b.t c.t1

?

追加變量值–+=

我們可以使用“+=”操作符給變量追加值。

?

#-----------------start----------------
var=aaa bbb ccc
var+=ddd
$(warning -----var:$(var))
#-----------------end----------------12345

輸出:

?

test.mk:4: -----var:aaa bbb ccc ddd1

?

override 指示符

如果有變量是通常make的命令行參數設置的,那么Makefile中對這個變量的賦值會被忽略。如果你想在Makefile中設置這類參數的值,那么,你可以使用“override”指示符。其語法是:

?

override <variable> = <value>
override <variable> := <value>
override <variable> += <more text>123

./build/kati/testcase/override_define.mk

?

override CC := gcc
override? AS = as12

?

#-----------------start----------------
$(warning -----var_01:$(var_01))
var_01 = test_01
$(warning -----var_01:$(var_01))
override var_01 = test_01
$(warning -----var_01:$(var_01))
#-----------------end----------------1234567

編譯命令

?

make var_01=test?? -f test.mk 1

輸出:

?

test.mk:2: -----var_01:test
test.mk:4: -----var_01:test
test.mk:6: -----var_01:test_01123

?

輸出:

error,warning 和 info
使用方式:

?

$(error string)
$(warningstring)
$(info string) 123

error:直接讓make報錯停止,并打出信息
warning :這個函數很像error函數,只是它并不會讓make退出,只是輸出一段警告信息,而make繼續執行
Info和warning類似。

樣例:

?

#-----------------start----------------
my_value = hello
$(warning ---warning-my_value:$(my_value))
$(info ----info-my_value:$(my_value))
$(error ----error-my_value:$(my_value))
#-----------------end----------------123456

測試結果:

?

test.mk:3: ---warning-my_value:hello
----info-my_value:hello
test.mk:5: *** ----error-my_value:hello。 停止。123

從測試結果來看,我們建議一般輸出信息使用warning,因為這會打印輸出信息的具體文件位置,而特別重要的變量,關系到編譯的結果的信息,我們才使用error打印信息。

?

條件判斷

?

ifeq ifneq

ifeq 比較參數“arg1”和“arg2”的值是否相同,如果相同則為真。

?

ifeq (<arg1>, <arg2> )
ifeq '<arg1>' '<arg2>'
ifeq "<arg1>" "<arg2>"
ifeq "<arg1>" '<arg2>'
ifeq '<arg1>' "<arg2>"12345

ifneq和ifeq類似:

?

ifneq (<arg1>, <arg2> )
ifneq '<arg1>' '<arg2>'
ifneq "<arg1>" "<arg2>"
ifneq "<arg1>" '<arg2>'
ifneq '<arg1>' "<arg2>"12345

使用格式為:

?

ifeq (arg1,arg2)
$(warning ----)
else
$(warning ----)
endif12345

?

ifeq (arg1,arg2)
$(warning ----)
else ifeq (arg3,arg4)
$(warning ----)
endif12345

測試樣例:

?

#-----------------start----------------
my_value_01 = hello_1
my_value_02 = hello_2

ifeq ($(my_value_01),$(my_value_02))
$(warning ----my_value_01==my_value_02)
else
$(warning ----my_value_01!=my_value_02)
endif

my_value_02 = hello_1
ifeq ($(my_value_01),$(my_value_02))
$(warning ----my_value_01==my_value_02)
else
$(warning ----my_value_01!=my_value_02)
endif
#-----------------end----------------1234567891011121314151617

輸出:

?

test.mk:8: ----my_value_01!=my_value_02
test.mk:13: ----my_value_01==my_value_0212

如果定義TINNO_LANIX_DATACON_ALERT為true,就內置LanixDataconAlert:

?

TINNO_LANIX_DATACON_ALERT := true
ifeq ($(strip $(TINNO_LANIX_DATACON_ALERT)),true)
? PRODUCT_PACKAGES += LanixDataconAlert
endif1234

如果定義PRODUCT_PREBUILT_WEBVIEWCHROMIUM為yes,就包含vendor/google/gms/apps/WebViewGoogle/overlay。

?

PRODUCT_PREBUILT_WEBVIEWCHROMIUM := yes
ifeq ($(PRODUCT_PREBUILT_WEBVIEWCHROMIUM),yes)
PRODUCT_PACKAGES += WebViewGoogle
# The following framework overlay must be included if prebuilt WebViewGoogle.apk is used
PRODUCT_PACKAGE_OVERLAYS += vendor/google/gms/apps/WebViewGoogle/overlay
endif123456

如果為eng版本就不內置SetupWizard,如果不為eng就內置SetupWizard。

?

ifeq ($(strip $(TARGET_BUILD_VARIANT)),eng)
#$(warning ----eng---no--need---setupwizard----)
else
PRODUCT_PACKAGES += \
??? SetupWizard
endif123456

如果TARGET_USES_QTIC為空,就將TARGET_USES_QTIC置為true

?

ifeq ($(strip $(TARGET_USES_QTIC)),)
?TARGET_USES_QTIC := true
?endif123

如果PROJECT_NAME不為空,就復制對應vendor/tinno/(TARGETPRODUCT)/(PROJECT_NAME)/copy_custom_files文件,如果PROJECT_NAME為空,就對應復制vendor/tinno/$(TARGET_PRODUCT)/trunk/copy_custom_files文件

?

#wangyanhui add for custom copy_files
ifneq ($(strip $(PROJECT_NAME)),)
COPY_FILES_PATH := vendor/tinno/$(TARGET_PRODUCT)/$(PROJECT_NAME)/copy_custom_files
$(shell cp -rf? $(COPY_FILES_PATH)/*?? .)
else
COPY_FILES_PATH := vendor/tinno/$(TARGET_PRODUCT)/trunk/copy_custom_files
$(shell cp -rf? $(COPY_FILES_PATH)/*?? .)
endif
#copy_files end123456789

?

ifdef ifndef

?

ifdef <variable-name>1

如果變量的值非空,那到表達式為真。否則,表達式為假。當然,同樣可以是一個函數的返回值。
注意,ifdef只是測試一個變量是否有值,其并不會把變量擴展到當前位置。還是來看例子:

?

#-----------------start----------------
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif
$(warning ----frobozz=$(frobozz))

foo =
ifdef foo
frobozz = yes
else
frobozz = no
endif
$(warning ----frobozz=$(frobozz))
#-----------------end----------------123456789101112131415161718

輸出:

?

test.mk:9: ----frobozz=yes
test.mk:17: ----frobozz=no12

在*.c文件中定義:

?

#ifndef WIFI_SDIO_IF_DRIVER_MODULE_PATH
#define WIFI_SDIO_IF_DRIVER_MODULE_PATH "/system/lib/modules/librasdioif.ko"
#endif123

在mk文件中:

?

ifdef WIFI_DRIVER_MODULE_PATH
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH=\"$(WIFI_DRIVER_MODULE_PATH)\"
endif123

?

foreach 循環函數

?

$(foreach <var>,<list>,<text> )1

這個函數的意思是,把參數中的單詞逐一取出放到參數所指定的變量中,然后再執行所包含的表達式。每一次會返回一個字符串,循環過程中,的所返回的每個字符串會以空格分隔,最后當整個循環結束時,所返回的每個字符串所組成的整個字符串(以空格分隔)將會是foreach函數的返回值。
所以,最好是一個變量名,可以是一個表達式,而中一般會使用這個參數來依次枚舉中的單詞。

?

#-----------------start----------------
name:=a b c d
file:=$(foreach i,$(name),$(i).java)
$(warning -----file:$(file))
#-----------------end----------------12345

輸出:

?

test.mk:4: -----file:a.java b.java c.java d.java1

?

include–引用其它的Makefile

在Makefile使用include關鍵字可以把別的Makefile包含進來,這很像C語言的#include,被包含的文件會原模原樣的放在當前文件的包含位置。

?

include $(LOCAL_PATH)/models/Android.mk
include foo.make a.mk b.mk c.mk e.mk f.mk12

?

Makefile 書寫命令

? 每條規則中的命令和操作系統Shell的命令行是一致的。make會一按順序一條一條的執行命令,每條命令的開頭必須以[Tab]鍵開頭,除非,命令是緊跟在依賴規則后面的分號后的。在命令行之間中的空格或是空行會被忽略,但是如果該空格或空行是以Tab鍵開頭的,那么make會認為其是一個空命令。
1

?

顯示命令–”@”

通常,make會把其要執行的命令行在命令執行前輸出到屏幕上。當我們用“@”字符在命令行前,那么,這個命令將不被make顯示出來。
如果make執行時,帶入make參數“-n”或“–just-print”,那么其只是顯示命令,但不會執行命令,這個功能很有利于我們調試我們的Makefile,看看我們書寫的命令是執行起來是什么樣子的或是什么順序的。
而make參數“-s”或“–slient”則是全面禁止命令的顯示。
例如:

?

#-----------------start----------------
.PHONY: clean
clean:
??? @echo "make clean start"
??? @mkdir test_temp.mk
??? @rm -rf test_temp.mk
??? @echo "make clean success"
#-----------------end----------------12345678

注意,@前一定要是TAB鍵
輸出:

?

android@tesdt-Precision-T1700:/SSD/test$ make -f test.mk
make clean start
make clean success

android@tesdt-Precision-T1700:/SSD/test$ make -n? -f test.mk
echo "make clean start"
mkdir test_temp.mk
rm -rf test_temp.mk
echo "make clean success"
12345678910

/build/core/main.mk

?

.PHONY: clean
clean:
??? @rm -rf $(OUT_DIR)/*
??? @rm -rf $(PWD)/vendor/myos/common/*
??? @echo "Entire build directory removed."12345

?

命令出錯

每當命令運行完后,make會檢測每個命令的返回碼,如果命令返回成功,那么make會執行下一條命令,當規則中所有的命令成功返回后,這個規則就算是成功完成了。如果一個規則中的某個命令出錯了(命令退出碼非零),那么make就會終止執行當前規則,這將有可能終止所有規則的執行。
??? 有些時候,命令的出錯并不表示就是錯誤的。例如mkdir命令,我們一定需要建立一個目錄,如果目錄不存在,那么mkdir就成功執行,萬事大吉,如果目錄存在,那么就出錯了。我們之所以使用mkdir的意思就是一定要有這樣的一個目錄,于是我們就不希望mkdir出錯而終止規則的運行。
?? 為了做到這一點,忽略命令的出錯,我們可以在Makefile的命令行前加一個減號“-”(在Tab鍵之后),標記為不管命令出不出錯都認為是成功的。如:

?

clean:
??? -rm -f *.o12

還有一個全局的辦法是,給make加上“-i”或是“–ignore-errors”參數,那么,Makefile中所有命令都會忽略錯誤。而如果一個規則是以“.IGNORE”作為目標的,那么這個規則中的所有命令將會忽略錯誤。這些是不同級別的防止命令出錯的方法,你可以根據你的不同喜歡設置。
還有一個要提一下的make的參數的是“-k”或是“–keep-going”,這個參數的意思是,如果某規則中的命令出錯了,那么就終目該規則的執行,但繼續執行其它規則。

?

使用函數

在Makefile中可以使用函數來處理變量,從而讓我們的命令或是規則更為的靈活和具有智能。make所支持的函數也不算很多,不過已經足夠我們的操作了。函數調用后,函數的返回值可以當做變量來使用。
函數調用,很像變量的使用,也是以“$”來標識的,其語法如下:

?

$(<function> <arguments> )
${<function> <arguments>}12

這里,就是函數名,make支持的函數不多。是函數的參數,參數間以逗號“,”分隔,而函數名和參數之間以“空格”分隔。函數調用以“”開頭,以圓括號或花括號把函數名和參數括起。感覺很像一個變量,是不是?函數中的參數可以使用變量,為了風格的統一,函數和變量的括號最好一樣,如使用“ ”開頭,以圓括號或花括號把函數名和參數括起。感覺很像一個變量,是不是?函數中的參數可以使用變量,為了風格的統一,函數和變量的括號最好一樣,如使用“”開頭,以圓括號或花括號把函數名和參數括起。感覺很像一個變量,是不是?函數中的參數可以使用變量,為了風格的統一,函數和變量的括號最好一樣,如使用“(subst a,b,(x))”這樣的形式,而不是“ (x))”這樣的形式,而不是“(x))”這樣的形式,而不是“(subst a,b,${x})”的形式。因為統一會更清楚,也會減少一些不必要的麻煩。

?

字符串處理函數

?

strip 去空格函數

?

$(strip string)1

功能:去掉字串中開頭和結尾的空字符。?
返回:返回被去掉空格的字符串值。

?

#-----------------start----------------
my_value = hello
$(warning ----my_value:$(strip $(my_value)))
#-----------------end----------------1234

輸出:

?

test.mk:3: ----my_value:hello1

?

$(strip a b c )1

把字串“a b c ”去到開頭和結尾的空格,結果是“a b c”。

?

#-----------------start----------------
my_value_01 = hello_1
my_value_02 = hello_2
my_value_03 = hello_3

$(warning ----:$(strip $(my_value_01) $(my_value_02) $(my_value_03)))
#-----------------end----------------1234567

輸出:

?

test.mk:6: ----:hello_1 hello_2 hello_31

?

findstring–查找字符串函數

?

findstring string_a, string_Src1

功能:從string_Src中查找string_a?
返回:如果查找到string_a,返回string_a,如果沒有查找到,返回空字符串。
樣例:

?

#-----------------start----------------
$(warning ----$(findstring a,a b c))
$(warning ----$(findstring a,b c))
#-----------------end----------------1234

輸出:

?

test.mk:2: ----a
test.mk:3: ----12

?

WIKO_SOUND_VERSION:=wiko_sound_1_3

ifneq ($(strip $(WIKO_SOUND_VERSION)),)
$(warning $(WIKO_SOUND_VERSION))
ifeq ($(findstring _1_0, $(strip $(WIKO_SOUND_VERSION))),_1_0)

else ifeq ($(findstring _1_1, $(strip $(WIKO_SOUND_VERSION))),_1_1)

findstring 7731g,$(CONFIGURE_SRC)123456789

?

filter 和 filter-out–過濾函數和反過濾函數

filter

?

$(filter word1 word2,$(VARIANTS))1

判斷變量VARIANTS中是否包含word1和 word2,如果包含就把VARIANTS中包含的word1和word2之外的過濾掉

?

VARIANTS := mon tue wed thu fri sat sun
DAY := $(filter sat sun,$(VARIANTS))
$(info $(DAY))123

輸出結果為:

?

sat sun1

filter-out

?

$(filter-out word1 word2,$(VARIANTS))1

判斷變量VARIANTS中是否包含word1和 word2,如果包含就把VARIANTS中包含的word1和word2過濾掉,其余的全部保留

示例:

?

VARIANTS := mon tue wed thu fri sat sun
DAY := $(filter-out sat sun,$(VARIANTS))
$(info $(DAY))123

輸出結果為:

?

mon tue wed thu fri1

?

subst -字符串替換

?

$(subst <from>,<to>,<text> )1

名稱:字符串替換函數——subst。
功能:把字串中的字符串替換成。
返回:函數返回被替換過后的字符串。

?

#-----------------start----------------
$(warning ----$(subst o,e,football))
#-----------------end----------------123

輸出:

?

test.mk:2: ----feetball1

?

patsubst–模式字符串替換函數

?

$(patsubst <pattern>,<replacement>,<text> )1

功能:查找中的單詞(單詞以“空格”、“Tab”或“回車”“換行”分隔)是否符合模式,如果匹配的話,則以替換。這里,可以包括通配符“%”,表示任意長度的字串。如果中也包含“%”,那么,中的這個“%”將是中的那個“%”所代表的字串。(可以用“\”來轉義,以“\%”來表示真實含義的“%”字符)返回:函數返回被替換過后的字符串。

?

#-----------------start----------------
$(warning ----$(patsubst %.c,%.o,x.c.c bar.c)))
#-----------------end----------------123

輸出:

?

test.mk:2: ----x.c.o bar.o1

?

sort–排序函數

?

$(sort <list> )1

功能:給字符串中的單詞排序(升序)。
返回:返回排序后的字符串。
備注:sort函數會去掉中相同的單詞。

?

#-----------------start----------------
$(warning ----$(sort foo bar lose))
$(warning ----$(sort foo bar bar lose))
#-----------------end----------------1234

輸出:

?

test.mk:2: ----bar foo lose
test.mk:3: ----bar foo lose12

?

word–取單詞函數

?

$(word <n>,<text> )1

功能:取字符串中第個單詞。(從一開始)
返回:返回字符串中第個單詞。如果比中的單詞數要大,那么返回空

?

#-----------------start----------------
$(warning ----$(word 1, foo bar baz))
#-----------------end----------------123

輸出:

?

test.mk:2: ----foo1

?

wordlist–取單詞串函數

?

$(wordlist <s>,<e>,<text> )1

功能:從字符串中取從開始到的單詞串。和是一個數字。
返回:返回字符串中從到的單詞字串。如果比中的單詞數要大,那么返回空字符串。如果大于的單詞數,那么返回從開始,到結束的單詞串。

?

#-----------------start----------------
$(warning ----$(wordlist 2, 3, foo bar2 bar3))
#-----------------end----------------123

輸出:

?

test.mk:2: ----bar2 bar31

?

words–單詞個數統計函數

?

$(words <text> )1

功能:統計中字符串中的單詞個數。
返回:返回中的單詞數。
備注:如果我們要取中最后的一個單詞,我們可以這樣:(word (word(word (words??
), )。

?

#-----------------start----------------
string = foo bar baz
$(warning ----$(words $(string)))
$(warning ----$(word $(words $(string)),$(string)))
#-----------------end----------------12345

輸出:

?

test.mk:3: ----3
test.mk:4: ----baz12

?

firstword–首單詞函數

?

$(firstword <text> )1

功能:取字符串中的第一個單詞。
返回:返回字符串的第一個單詞。

?

#-----------------start----------------
string = foo bar baz
$(warning ----$(firstword? $(string)))
#-----------------end----------------1234

輸出:

?

test.mk:3: ----foo1

?

文件名操作函數

?

取目錄函數——dir

?

$(dir <names...> )1

功能:從文件名序列中取出目錄部分。目錄部分是指最后一個反斜杠(“/”)之前的部分。如果沒有反斜杠,那么返回“./”。
返回:返回文件名序列的目錄部分。
示例: $(dir src/foo.c hacks)返回值是“src/ ./”。

?

#-----------------start----------------
$(warning -----dir:$(dir src/hellp.java test.sh))
#-----------------end----------------123

輸出:

?

test.mk:3: -----dir:src/ ./1

?

取文件函數——notdir

?

$(notdir <names...> )1

功能:從文件名序列中取出非目錄部分。非目錄部分是指最后一個反斜杠(“/”)之后的部分。
返回:返回文件名序列的非目錄部分。

?

#-----------------start----------------
$(warning -----notdir:$(notdir src/hellp.java test.sh))
#-----------------end----------------123

輸出:

?

test.mk:2: -----notdir:hellp.java test.sh1

?

取后綴函數——suffix

?

$(suffix <names...> )1

功能:從文件名序列中取出各個文件名的后綴。
返回:返回文件名序列的后綴序列,如果文件沒有后綴,則返回空字串。

?

#-----------------start----------------
$(warning -----suffix:$(suffix src/hellp.java test.sh))
#-----------------end----------------123

輸出:

?

test.mk:2: -----suffix:.java .sh1

?

取前綴函數——basename

?

$(basename <names...> )1

功能:從文件名序列中取出各個文件名的前綴部分。
返回:返回文件名序列的前綴序列,如果文件沒有前綴,則返回空字串。

?

#-----------------start----------------
$(warning -----basename:$(basename src/hellp.java test.sh))
#-----------------end----------------123

輸出:

?

test.mk:2: -----basename:src/hellp test1

?

加后綴函數——addsuffix

?

$(addsuffix <suffix>,<names...> )1

功能:把后綴加到中的每個單詞后面。
返回:返回加過后綴的文件名序列。

?

#-----------------start----------------
$(warning -----addsuffix:$(addsuffix .java, src/hellp test))
#-----------------end----------------123

輸出:

?

test.mk:2: -----addsuffix:src/hellp.java test.java1

?

加前綴函數——addprefix

?

$(addprefix <prefix>,<names...> )1

功能:把前綴加到中的每個單詞后面。
返回:返回加過前綴的文件名序列。

?

#-----------------start----------------
$(warning -----addprefix:$(addprefix src/, hellp.java test.java))
#-----------------end----------------123

輸出:

?

test.mk:2: -----addprefix:src/hellp.java src/test.java1

?

連接函數——join

?

$(join <list1>,<list2> )1

功能:把中的單詞對應地加到的單詞后面。
返回:返回連接過后的字符串。

?

#-----------------start----------------
$(warning -----join:$(join aaa, b))
$(warning -----join:$(join a, bbb))

$(warning -----join:$(join aaabbb,1112222333444))
#-----------------end----------------123456

輸出:

?

test.mk:2: -----join:aaab
test.mk:3: -----join:abbb
test.mk:5: -----join:aaabbb1112222333444123

?

call函數

call函數是唯一一個可以用來創建新的參數化的函數。你可以寫一個非常復雜的表達式,這個表達式中,你可以定義許多參數,然后你可以用call函數來向這個表達式傳遞參數。其語法是:

?

$(call <expression>,<parm1>,<parm2>,<parm3>...)1

當 make執行這個函數時,參數中的變量,如(1), (1),(1),(2),$(3)等,會被參數,,依次取代。而的返回值就是 call函數的返回值。

?

#-----------------start----------------
reverse=$(1)$(2)
result=$(call reverse,a,b)
$(warning -----result:$(result))
#-----------------end----------------12345

輸出:

?

test.mk:4: -----result:ab1

?

shell函數

shell 函數也不像其它的函數。顧名思義,它的參數應該就是操作系統Shell的命令。它和反引號“`”是相同的功能。這就是說,shell函數把執行操作系統命令后的輸出作為函數返回。于是,我們可以用操作系統命令以及字符串處理命令awk,sed等等命令來生成一個變量。

?

#-----------------start----------------
result=$(shell cat test.mk)
$(warning -----result:$(result))
result=$(shell echo *.mk)
$(warning -----result:$(result))
#-----------------end----------------123456

輸出:

?

test.mk:3: -----result:#-----------------start---------------- result=$(shell cat test.mk) $(warning -----result:$(result)) result=$(shell echo *.mk) $(warning -----result:$(result)) #-----------------end----------------
test.mk:5: -----result:test _02.mk test.mk12

注意,這個函數會新生成一個Shell程序來執行命令,所以你要注意其運行性能,如果你的Makefile中有一些比較復雜的規則,并大量使用了這個函數,那么對于你的系統性能是有害的。特別是Makefile的隱晦的規則可能會讓你的shell函數執行的次數比你想像的多得多。

?

make 的運行

一般來說,最簡單的就是直接在命令行下輸入make命令,make命令會找當前目錄的makefile來執行,一切都是自動的。但也有時你也許只想讓 make重編譯某些文件,而不是整個工程,而又有的時候你有幾套編譯規則,你想在不同的時候使用不同的編譯規則,等等。本章節就是講述如何使用make命令的。

?

make的退出碼

make命令執行后有三個退出碼:
0 —— 表示成功執行。
1 —— 如果make運行時出現任何錯誤,其返回1。
2 —— 如果你使用了make的“-q”選項,并且make使得一些目標不需要更新,那么返回2。

?

指定Makefile

GNU make找尋默認的Makefile的規則是在當前目錄下依次找三個文件–“GNUmakefile”,“makefile”和“Makefile”。其按順序找這三個文件,一旦找到,就開始讀取這個文件并執行。

當前,我們也可以給make命令指定一個特殊名字的Makefile。要達到這個功能,我們要使用make的“-f”或是“–file”參數(“– makefile”參數也行)。
例如,我們有個makefile的名字是“hchen.mk”,那么,我們可以這樣來讓make來執行這個文件:

?

make –f hchen.mk1

如果在make的命令行是,你不只一次地使用了“-f”參數,那么,所有指定的makefile將會被連在一起傳遞給make執行。

?

make的參數

?

make -h
用法:make [選項] [目標] ...
選項:
? -b, -m????????????????????? 忽略兼容性。
? -B, --always-make?????????? Unconditionally make all targets.
? -C 目錄, --directory=目錄
????????????????????????????? 在所有操作前切換到“目錄”。
? -d????????????????????????? 打印大量調試信息。
? --debug[=FLAGS]???????????? 打印各種調試信息
? -e, --environment-overrides
????????????????????????????? 指定替代makefile中默認設置的環境變量
? -f FILE, --file=FILE, --makefile=FILE
????????????????????????????? 讀取 FILE 作為一個 makefile.
? -h, --help????????????????? 打印該消息并退出。
? -i, --ignore-errors???????? Ignore errors from commands.
? -I DIRECTORY, --include-dir=DIRECTORY
????????????????????????????? 搜索 DIRECTORY 為包含的 makefiles.
? -j [N], --jobs[=N]????????? 同時允許 N 個任務;無參數表明允許無限個任務。
? -k, --keep-going??????????? 當某些目標無法創建時仍然繼續。
? -l [N], --load-average[=N], --max-load[=N]
????????????????????????????? 不開始多線程工作除非系統負載低于N
? -L, --check-symlink-times?? Use the latest mtime between symlinks and target.
? -n, --just-print, --dry-run, --recon
????????????????????????????? 不要實際運行任何命令;僅僅輸出他們
? -o FILE, --old-file=FILE, --assume-old=FILE
????????????????????????????? 將FILE認作非常老,不要重新make它.
? -p, --print-data-base?????? 打印 make 的內部數據庫。
? -q, --question?????????????? 不運行任何命令;退出狀態說明是否已全部更新。
? -r, --no-builtin-rules????? 禁用內置隱含規則。
? -R, --no-builtin-variables?? 禁用內置變量設置。
? -s, --silent, --quiet?????? 不顯示命令。
? -S, --no-keep-going, --stop
????????????????????????????? 關閉 -k.
? -t, --touch???????????????? touch 目標而不是重新創建它們
? -v, --version?????????????? 打印 make 的版本號并退出。
? -w, --print-directory?????? 打印當前目錄。
? --no-print-directory??????? 即使 -w 隱式開啟,也要關閉 -w。
? -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
????????????????????????????? 將FILE認作無限新.
? --warn-undefined-variables? Warn when an undefined variable is referenced.

這個程序創建為 i686-pc-linux-gnu
Report bugs to <bug-make@gnu.org>12345678910111213141516171819202122232425262728293031323334353637383940414243

參考資料

1.Makefile經典教程(掌握這些足夠)
http://blog.csdn.net/ruglcc/article/details/7814546/

2.android開發筆記之mk文件
http://blog.csdn.net/hfreeman2008/article/details/46792693#t23
---------------------
作者:hfreeman2008
來源:CSDN
原文:https://blog.csdn.net/hfreeman2008/article/details/71418693?utm_source=copy
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的android开发笔记之Makefile(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

午夜.dj高清免费观看视频 | 91av短视频 | 亚洲福利精品 | 亚洲黄色区 | 国产精品美女久久久久久久网站 | 国产aaa毛片| 国产精品专区h在线观看 | 久久欧洲视频 | 伊人伊成久久人综合网小说 | 国产99在线播放 | 久久免费久久 | 国内精品久久久久影院一蜜桃 | 日韩网站在线看片你懂的 | 玖玖玖影院 | 97精品国产97久久久久久粉红 | 一级免费观看 | 日韩精品视频一二三 | 国内精品久久久久久久影视麻豆 | 欧美一区二区三区在线观看 | 久久久精品 一区二区三区 国产99视频在线观看 | 亚洲激情校园春色 | 精品中文字幕在线观看 | 在线亚洲成人 | 国产激情小视频在线观看 | 国产一区视频在线 | 日韩成人免费在线 | 国产精品黄色 | 国产一级黄色av | 黄色软件网站在线观看 | 亚洲va韩国va欧美va精四季 | www.香蕉视频 | 国产麻豆剧果冻传媒视频播放量 | 97品白浆高清久久久久久 | av一区二区三区在线播放 | 日韩av专区 | 亚洲成人av在线播放 | 久久久精品在线观看 | 91精品国产网站 | 日韩免费观看视频 | 亚洲最快最全在线视频 | 2000xxx影视 | 六月天色婷婷 | 天天天天爽 | 日韩免费福利 | 亚洲精品乱码久久久久v最新版 | 欧美精品一区二区在线观看 | www日韩| 久久久久久久国产精品视频 | 黄色福利视频网站 | 国产视频资源在线观看 | 欧美日韩在线精品一区二区 | 色网站国产精品 | 欧美综合在线视频 | 国产亚洲激情视频在线 | 国产精品黄色影片导航在线观看 | 久久露脸国产精品 | 国产成人精品综合久久久 | 99久久婷婷国产综合精品 | 成人免费视频观看 | 日韩大片免费在线观看 | 久久久电影网站 | 久久99国产精品二区护士 | 在线观看免费成人 | 五月天久久久久久 | 夜夜操天天干, | 黄色免费在线视频 | 精品久久久久久久久亚洲 | 国产亚洲字幕 | 亚洲国产精品资源 | 亚洲狠狠婷婷 | 欧美天天综合网 | 91精品国产一区二区在线观看 | 色五月色开心色婷婷色丁香 | 欧美日韩一级久久久久久免费看 | 久久久久久久久毛片精品 | 久久网址| 亚洲男人天堂a | 日本中文在线播放 | 成人久久毛片 | 一级免费片 | 欧美乱码精品一区二区 | 久久久久久99精品 | 在线观看成人av | 成人97人人超碰人人99 | 91视频一8mav | 91久久人澡人人添人人爽欧美 | 欧美日韩国产mv | 成人午夜黄色影院 | 亚洲美女在线一区 | 中文在线免费看视频 | 天天操 夜夜操 | 在线蜜桃视频 | 四虎影视国产精品免费久久 | 久久国产精品系列 | 91精品国产福利在线观看 | 免费观看的黄色 | 福利精品在线 | 日韩网站在线免费观看 | 91亚洲精 | 尤物九九久久国产精品的分类 | 青青河边草免费直播 | 国产99久久| 久久精品香蕉视频 | 久久新视频 | 在线а√天堂中文官网 | 国产精品嫩草影院123 | 免费看麻豆 | 久操视频在线播放 | 午夜精品久久久久久久久久久 | 国际精品久久久久 | 国产高清在线观看av | 婷婷在线观看视频 | 97在线视频网站 | 国产亚洲片 | 激情综合五月天 | 天天综合网天天综合色 | 国产成人精品电影久久久 | 久久精品8 | 国产玖玖视频 | 在线观看亚洲电影 | 特级西西人体444是什么意思 | 乱子伦av| 精品视频专区 | 日韩在线视频网 | 久久久久久久久久久高潮一区二区 | 国产成人a亚洲精品 | 久久视频在线 | 天天干天天干天天干天天干天天干天天干 | www.黄色片.com| 美女黄久久 | 亚洲一二三久久 | 特级a毛片 | 国产91在线观 | 国产传媒中文字幕 | 日韩午夜av电影 | 日韩在线播放av | 国产精品久久久久久久久久ktv | 亚州精品国产 | 免费在线成人av电影 | 久久久久国产精品视频 | 综合网五月天 | 日韩在线高清免费视频 | 成人在线超碰 | 五月天欧美精品 | 狠狠干天天射 | 911香蕉视频| 91精品导航| 黄色在线网站噜噜噜 | av网址在线播放 | 国产精品二区在线观看 | 日韩av电影中文字幕 | 天天插天天射 | 久久精品国产一区二区电影 | 亚洲精品视频网 | 在线观看成人av | 91看片看淫黄大片 | 99r在线精品 | 久久久精品在线观看 | 国内精品久久久久 | 久草在线99 | 激情五月五月婷婷 | 在线日韩一区 | 国产精品对白一区二区三区 | 成人小视频在线观看免费 | 三级av在线| 97国产电影| 国产精品久久久久久久久大全 | 香蕉97视频观看在线观看 | 天天插伊人 | 成人av资源 | 五月婷婷深开心 | 探花视频在线观看 | 欧美在线视频日韩 | 色99中文字幕 | 国产黄色特级片 | 国产午夜一区 | 色综合婷婷 | 天堂资源在线观看视频 | 天天操天天艹 | 免费观看的av | 午夜黄网| 天天干天天操天天入 | 久久99精品国产91久久来源 | 另类老妇性bbwbbw高清 | av在线日韩 | 狠狠躁天天躁 | av.com在线 | 成人黄色国产 | 日本深夜福利视频 | 国产精品18久久久久vr手机版特色 | 黄色av电影免费观看 | 日韩超碰 | 亚洲精品电影在线 | 天天操天天拍 | 99精品视频在线观看播放 | 1024手机基地在线观看 | 伊人首页| 中日韩三级视频 | 久草久热 | 成人午夜片av在线看 | 一区二区三区在线免费观看视频 | 91.麻豆视频 | 在线观看av小说 | 国产精品专区在线 | 日本在线观看中文字幕 | 色综合久久中文字幕综合网 | 国产免费观看久久 | 精品一区 在线 | 久久久久久久久久免费 | 日韩免费b| 国产精品久久久久亚洲影视 | 亚洲人成人在线 | 丁香5月婷婷 | 91九色自拍 | 美女av电影 | 久精品一区| 国产啊v在线观看 | 日本论理电影 | 久久免费av| 天天摸天天操天天舔 | 免费看的黄色的网站 | 国产看片网站 | 欧美精品一区二区蜜臀亚洲 | 久久久久久久久国产 | 国产成人高清 | 美女视频黄免费网站 | 国产不卡精品视频 | 深夜免费福利在线 | 999久久久精品视频 日韩高清www | 天天天色综合a | 成人av免费网站 | 日韩欧美综合精品 | 国内精品久久天天躁人人爽 | 日韩精品一区二区三区免费视频观看 | www久久久| 亚洲久久视频 | 97高清免费视频 | 日韩成人av在线 | 国产成人福利 | 91麻豆精品 | 久久国内精品 | 国产精选在线观看 | 玖玖精品在线 | 在线播放 日韩专区 | 91免费视频黄 | 四虎成人精品永久免费av九九 | 97在线精品视频 | 亚洲视频久久久久 | 人人超碰97 | 久久精品看 | 成人av在线网 | 亚洲国产欧洲综合997久久, | 国产精品久久久久久av | 在线观看国产麻豆 | 国产一区二区三区免费观看视频 | www成人av | 涩涩网站在线观看 | 免费观看高清 | 国产专区免费 | 黄色网www| 久久久亚洲麻豆日韩精品一区三区 | 五月天电影免费在线观看一区 | 中文字幕人成人 | 国产一区视频免费在线观看 | 91精品视频观看 | 久久久久久国产精品免费 | 国产香蕉av | 狠狠干 狠狠操 | 狠狠躁日日躁夜夜躁av | 韩日精品在线观看 | 成人免费观看大片 | 在线视频 91 | 欧美另类xxxxx | 伊人永久| 久久好看免费视频 | 婷婷日 | 麻豆91在线 | 国产又粗又硬又长又爽的视频 | 亚洲视频在线视频 | 国产精品一区二区电影 | 午夜色性片 | 懂色av一区二区三区蜜臀 | 久久免费播放 | 久久夜夜操 | 99精品国产福利在线观看免费 | 91视频下载| 黄色小说免费在线观看 | 成人黄色大片网站 | 四虎影视国产精品免费久久 | 在线观看www. | 99久久综合狠狠综合久久 | 日韩91精品| 久久大视频 | 亚洲精品中文字幕在线观看 | 天堂入口网站 | 美女福利视频一区二区 | 成人wwwxxx视频 | 日韩精品一区二区免费 | 午夜av网站 | 久草综合视频 | 天堂av网在线| 九九免费视频 | 最新不卡av | 啪啪凸凸 | 在线一区观看 | 91麻豆精品国产自产在线游戏 | 成年人在线免费看视频 | 性色av一区二区三区在线观看 | 亚洲国产美女精品久久久久∴ | 国产免费观看久久 | 伊人激情网 | 激情网五月婷婷 | 中文字幕在线人 | 欧美91精品久久久久国产性生爱 | 亚洲精品免费在线视频 | 中文字幕精品www乱入免费视频 | www.日本色| 国产精品大尺度 | 国产精品久久久久久久久蜜臀 | aaa黄色毛片 | 日韩精品视频免费专区在线播放 | 欧美日韩视频一区二区 | 欧美另类z0zx| 欧美日韩国产一二三区 | 成人av电影在线播放 | 日韩在线观看电影 | 国产一区在线精品 | 久草五月 | 天天舔天天搞 | 少妇激情久久 | 一级黄网| 欧美国产日韩在线观看 | 久久全国免费视频 | 国产日韩av在线 | 精品一区二区视频 | 久草精品视频在线播放 | 亚洲国产精品va在线 | 97色噜噜| 欧美福利视频一区 | 国产精品一区二区白浆 | 四虎影院在线观看av | 91看片淫黄大片一级在线观看 | 在线亚洲欧美日韩 | 麻豆免费精品视频 | 久久久2o19精品 | 色吊丝在线永久观看最新版本 | 精品久久久久久国产 | 日韩精品久久久 | 久久这里只有精品首页 | japanesexxxhd奶水 91在线精品一区二区 | 免费观看久久 | 国产欧美精品一区二区三区 | 永久免费观看视频 | 日韩电影中文字幕 | 婷婷久久五月 | 亚洲成人一二三 | 六月激情 | 久久首页 | 色综合激情网 | 欧美少妇18p | 996久久国产精品线观看 | 伊人久久av | 成人中文字幕在线观看 | 久久精品国产免费看久久精品 | 国产精品一区二区62 | 欧美在线视频免费 | 欧洲色吧| 五月婷婷激情 | 日韩影视在线 | 小草av在线播放 | 色偷偷97| 久青草国产在线 | 国产资源免费在线观看 | 色成人亚洲 | 日本中文字幕观看 | 日日夜夜免费精品 | 成人a在线 | 久久综合一本 | 一区二区精品在线观看 | 综合天天色| 亚洲六月丁香色婷婷综合久久 | 91视频在线观看下载 | 国产精品久免费的黄网站 | 欧美性大战 | 久保带人 | www.久久免费 | 天天色天天色 | 韩国av永久免费 | 国产一级电影免费观看 | a天堂中文在线 | 色视频在线观看 | 国产在线观看午夜 | 天天综合婷婷 | 免费一区在线 | 国产成人精品三级 | 久久性生活片 | 国产成人av在线影院 | 亚洲另类视频在线 | 伊人激情网 | 亚洲精品久久久久中文字幕二区 | 99精品福利 | 国产婷婷vvvv激情久 | av一级一片 | 久av电影| 久热色超碰 | 中文字幕一区二区三区在线视频 | 五月婷网 | 亚洲无人区小视频 | 婷婷六月中文字幕 | 亚洲国产精品成人女人久久 | 六月激情丁香 | 不卡在线一区 | 久久久久国产成人免费精品免费 | 涩涩色亚洲一区 | 色视频成人在线观看免 | 欧美久久99 | 国产91对白在线 | 亚洲精品在 | 欧美精品久久 | 国产亚洲精品精品精品 | 久久 精品一区 | 久久久久亚洲国产精品 | 2024国产精品视频 | 黄色软件在线看 | 99久久毛片 | 亚洲精品欧美视频 | 亚洲欧美精品在线 | 黄在线免费看 | 色视频国产直接看 | 久久精品视频国产 | 婷婷五天天在线视频 | 日本午夜免费福利视频 | 亚洲国产成人在线播放 | 日本久久不卡视频 | 最新日韩在线观看 | 日韩激情视频在线 | 中文字幕专区高清在线观看 | 人人干人人模 | 人人干狠狠操 | 中文字幕在线免费观看 | av线上免费观看 | 亚洲国产视频在线 | 久久久久国产一区二区三区 | 九九热免费精品视频 | 91免费视频国产 | 国产啊v在线观看 | 欧美一区成人 | 免费视频一级片 | 91在线免费视频 | 国产一区二区三区免费在线观看 | 国产资源网站 | 欧美成人黄 | 中文字幕在线免费播放 | 色综合天天射 | 国产三级久久久 | 四虎www com| 国产精品热视频 | 久久免费资源 | 欧美日韩国产精品一区二区亚洲 | 国产精品永久久久久久久www | 国产精品国产精品 | 人人爽人人爽人人爽学生一级 | 久久久久人人 | 久久综合免费视频 | 人人射人人插 | 日韩精品第一区 | 久久国产精品久久w女人spa | 免费网站污 | 国产免费亚洲 | 91日韩在线视频 | 国产精品久久久免费 | 日韩av高清在线观看 | 欧美日韩不卡一区 | 国产精品久久久久久久久久了 | 黄色一集片 | 久久色在线观看 | 精久久久久 | 高清av免费看 | 婷婷色在线视频 | 午夜精品电影 | 午夜在线日韩 | 国产精品6999成人免费视频 | 九色精品免费永久在线 | 日韩成人在线免费观看 | 亚洲尺码电影av久久 | 蜜臀av性久久久久蜜臀av | 国产视频每日更新 | 人人舔人人舔 | 欧美精品一区二区三区四区在线 | 国产专区视频在线观看 | 色亚洲网 | 91视频这里只有精品 | 在线观看视频99 | 色在线免费 | 日韩中文在线字幕 | 九九热在线观看视频 | 亚洲婷婷在线视频 | av中文字幕在线播放 | 国产亚洲片 | 欧美日韩天堂 | 最新99热| 国产69精品久久久久久 | av免费网| 玖玖视频在线 | 午夜影院在线观看18 | 国产99久久99热这里精品5 | 伊人网av | 欧美精品久久人人躁人人爽 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产在线永久 | 久久久久久久看片 | 亚洲精品裸体 | 久久免费的视频 | 亚洲丝袜中文 | 久久久久久久福利 | 99久久精品国产观看 | 日韩国产精品久久久久久亚洲 | 激情欧美丁香 | 亚洲成人二区 | 一区二区三区国产精品 | 97在线免费视频 | 日韩久久一区 | 午夜久久福利影院 | 毛片网站免费 | 欧美一级黄大片 | 91在线播放视频 | aav在线| 新版资源中文在线观看 | 中文字幕 在线看 | 五月婷影院 | 欧美精品少妇xxxxx喷水 | 成av在线 | 嫩草av影院 | 91香蕉国产 | 久久久精品久久日韩一区综合 | 国内精品久久久久久久影视简单 | 日韩av男人的天堂 | 超碰97在线资源站 | 国产精品白浆 | 最新中文字幕在线播放 | 丁香五月缴情综合网 | 久久三级视频 | 网站免费黄色 | 色噜噜噜噜 | 日韩乱色精品一区二区 | 午夜色影院 | 亚洲一区二区天堂 | 国产99一区| 亚洲精品久久久蜜臀下载官网 | a在线免费| 99爱爱| 亚洲激情综合网 | 亚洲视频综合在线 | 日产乱码一二三区别免费 | 色婷婷骚婷婷 | 免费福利在线播放 | www.91av在线| 国产又粗又猛又黄又爽视频 | 久久精品高清 | 中文字幕 91 | 色噜噜在线观看 | 国产黄a三级三级 | 日日摸日日 | 成年人在线观看免费视频 | 国产精品久久久999 国产91九色视频 | 亚洲区另类春色综合小说校园片 | 天堂av网址 | 99麻豆久久久国产精品免费 | 国产成人高清在线 | 国产香蕉视频 | 国产91对白在线 | 久久精品电影 | 精品视频中文字幕 | 在线免费国产视频 | 伊人久久精品久久亚洲一区 | 在线天堂视频 | 亚洲天天综合网 | 97夜夜澡人人双人人人喊 | 久久激情五月婷婷 | 99草视频 | 中文在线www | 亚洲福利精品 | 99精品视频免费全部在线 | 日韩精品专区 | 国产99久久精品一区二区300 | av色图天堂网 | 欧美精品久久久久性色 | 国产精品电影在线 | 人人揉人人揉人人揉人人揉97 | 日韩 在线 | 精品久久一区 | 激情欧美日韩一区二区 | 伊人天天狠天天添日日拍 | 欧美一二三在线 | 在线观看爱爱视频 | 久久久久久久久久久久久久免费看 | 高清国产午夜精品久久久久久 | 欧美日韩国产精品爽爽 | 国产成人一区二区三区 | 毛片视频电影 | 玖玖综合网 | 波多野结衣精品 | 456免费视频 | 国产精品久久麻豆 | 免费看黄网站在线 | 狠狠干天天色 | 五月天电影免费在线观看一区 | 精品国产诱惑 | 97精品在线视频 | 综合久久网站 | 在线观看网站av | 色吊丝在线永久观看最新版本 | 国产99精品在线观看 | 国产精彩视频一区 | 欧美激情一区不卡 | 国产一二三区av | 91香蕉视频 mp4 | v片在线播放 | 日韩在线视频看看 | 日韩av片无码一区二区不卡电影 | 香蕉视频在线观看免费 | 十八岁免进欧美 | 精品1区2区3区 | 色婷婷视频在线 | 500部大龄熟乱视频 欧美日本三级 | 日韩欧美高清不卡 | 久草精品视频在线看网站免费 | 天天做天天爱天天综合网 | 成人久久18免费网站图片 | 丁香激情网 | 一区二区三区免费在线播放 | 国产精品自产拍 | 99精品国产一区二区三区麻豆 | 日本不卡一区二区三区在线观看 | 天天操天天干天天操天天干 | 亚洲天堂自拍视频 | 最新日本中文字幕 | 91久久久国产精品 | 五月天电影免费在线观看一区 | 国产中文字幕免费 | 天天天干天天天操 | 免费中午字幕无吗 | 美女黄频 | 亚洲三级黄| 天天操比 | 国产亚洲在线 | 成人永久在线 | 国产视频在线免费观看 | 九九在线高清精品视频 | 天天综合入口 | 日本公妇色中文字幕 | 成人性生交视频 | 超碰在线1 | 国模精品一区二区三区 | 天天插天天爱 | 精品在线免费观看 | 亚洲欧美激情精品一区二区 | 中文字幕一区二区三区乱码不卡 | 国产精品系列在线观看 | 最近在线中文字幕 | 四虎影视成人永久免费观看亚洲欧美 | 国产在线观看网站 | 成人手机在线视频 | 日韩午夜高清 | 国产亚洲免费的视频看 | 欧美在线视频精品 | 久久手机视频 | 中文字幕在线中文 | 网站在线观看你们懂的 | 狠狠操狠狠干天天操 | 91在线免费观看网站 | 97热久久免费频精品99 | 欧美在线一级片 | 在线观看va | 高清不卡毛片 | 免费在线播放黄色 | 国产九九在线 | 亚洲成a人片在线观看网站口工 | 色偷偷人人澡久久超碰69 | 久久免费片 | 久草在线观看视频免费 | 欧美a视频 | 丁香婷婷激情网 | 人人讲 | 成人av免费电影 | 久久久黄色免费网站 | 久久高清免费视频 | 天堂在线视频中文网 | 中文区中文字幕免费看 | 婷婷国产视频 | 在线99| 日本精品va在线观看 | 五月天国产| 97免费中文视频在线观看 | 日韩成人免费观看 | 日日干夜夜骑 | 99热精品视| 中文字幕在线第一页 | 天天插综合 | 91成人精品观看 | 国产区精品在线观看 | 中文字幕在线观看av | 国产91影院| 麻豆免费视频观看 | 日韩在线国产精品 | 久久不卡国产精品一区二区 | 亚洲精品视频在线免费播放 | 一区二区三区免费在线观看视频 | 成人97视频| 麻豆久久久 | 最新日韩电影 | 99热.com| 99久久激情视频 | 国产一二区视频 | 99r精品视频在线观看 | 一级黄视频 | 国产精品自产拍在线观看中文 | av电影不卡| 96香蕉视频 | 精品国产免费久久 | 女人高潮一级片 | 人人插人人看 | 日韩欧美观看 | av激情五月 | 日韩美女久久 | 不卡的av中文字幕 | 亚洲激情在线播放 | 国产69精品久久久久久久久久 | 日韩视频免费观看高清完整版在线 | 免费美女久久99 | 精品久久久久久国产 | 成年人毛片在线观看 | 久久精品国产免费看久久精品 | 国产麻豆精品久久一二三 | 久久精品人 | 99精品国产一区二区三区麻豆 | 日韩高清在线一区 | 午夜91在线 | 成全在线视频免费观看 | 中文字幕在线国产 | 91精品国产91热久久久做人人 | 日本bbbb摸bbbb | 99久久影视 | 中文字幕在线观看亚洲 | 国产精品嫩草影院9 | 国产精品久久久久aaaa九色 | 成年人精品 | 久久精品导航 | 在线视频中文字幕一区 | 中文字幕亚洲综合久久五月天色无吗'' | 97超碰人人模人人人爽人人爱 | 亚洲 综合 激情 | 国产剧情一区二区在线观看 | 久久久久高清毛片一级 | 国产精品一二 | 免费高清在线观看成人 | 国产精品网在线观看 | 国产在线资源 | 黄色av高清 | 免费av大全 | 精品亚洲成人 | 精品一区二区三区在线播放 | 少妇bbbb揉bbbb日本 | 人人射网站 | 91视频久久 | 在线观看日韩免费视频 | 成人毛片一区二区三区 | 99情趣网视频 | 在线免费观看涩涩 | 天天色图 | 亚洲日本va午夜在线电影 | 91视频下载 | 亚洲视频99 | 麻豆视频免费在线 | 五月婷婷久草 | 成 人 a v天堂 | 国产 日韩 欧美 中文 在线播放 | 综合网中文字幕 | 亚洲视频久久久久 | 日日夜夜免费精品视频 | 亚洲在线日韩 | 成年人在线免费看视频 | 亚洲精品黄色片 | 国内精品久久久久久久97牛牛 | 中文字幕免费一区 | 日韩久久精品一区 | 女人高潮特级毛片 | 天天色综合1 | 91超在线 | 日韩系列在线 | 成年人免费电影在线观看 | 99热精品在线观看 | 狠狠色丁香婷婷综合 | 玖玖国产精品视频 | 超碰97公开 | 93久久精品日日躁夜夜躁欧美 | 色婷婷电影网 | 欧美少妇影院 | 亚洲在线综合 | 国产美女精品视频 | 欧美性猛片, | 亚洲女欲精品久久久久久久18 | 99久久精品国产免费看不卡 | 色综合久久久久久中文网 | 亚洲精品国精品久久99热一 | 中文字幕日韩av | 国产无遮挡又黄又爽在线观看 | 久久9精品 | 国产高清在线不卡 | 九九九九精品 | 久草精品视频在线播放 | av免费电影在线观看 | 久久久久久久久久久久久久免费看 | 狠狠色丁香婷婷综合久小说久 | 天天综合网天天 | 国产精品理论片在线播放 | 国产亚洲人成网站在线观看 | 激情动态| 91麻豆精品国产自产在线 | 亚洲综合精品视频 | 久久综合九色综合网站 | 西西44人体做爰大胆视频 | 99久久综合国产精品二区 | 97**国产露脸精品国产 | 日本中文字幕高清 | 中文字幕一二三区 | 国产夫妻av在线 | 丁香婷婷激情网 | 亚洲久草在线 | 一本一本久久a久久精品综合小说 | 狠狠网 | 97视频人人澡人人爽 | 亚洲精品毛片一级91精品 | 特级西西444www大精品视频免费看 | 丁香资源影视免费观看 | 久久99精品久久只有精品 | 九九热免费精品视频 | 激情婷婷综合 | 天天爱天天草 | 日韩精品一区二区三区第95 | 天天想夜夜操 | 国产国语在线 | 欧美精品一级视频 | 97在线观看免费高清 | 免费在线播放 | 中文字幕免费播放 | 国产精品丝袜久久久久久久不卡 | 激情在线网站 | 成人一区影院 | 精品一区二区精品 | 日韩一区二区三区在线观看 | 日韩欧美视频免费在线观看 | 天天伊人狠狠 | 91手机电视 | 日韩精品一区二区三区不卡 | 欧美成人a在线 | 亚洲观看黄色网 | 亚洲精品66| 免费高清在线视频一区· | 亚洲免费在线 | 国产美女黄网站免费 | 国产91精品看黄网站在线观看动漫 | 日日夜夜综合网 | 日韩在线电影一区 | 欧美人交a欧美精品 | 久久网址| 91精品视频观看 | 国产综合91 | 美女久久精品 | 九九热久久免费视频 | 97免费在线观看 | 香蕉视频免费看 | 精品国产乱码久久久久 | 国产九九热视频 | 国产成人久久精品77777 | 欧美久草网 | 国内久久看 | av成人免费 | 日本黄色大片免费看 | 天天射天天操天天 | 人人玩人人添人人 | 天天操天天添 | 国产美女精品久久久 | 麻豆视频国产在线观看 | www.狠狠色.com| 亚洲欧美视频在线 | 国产精品无av码在线观看 | 成片免费观看视频 | 日韩高清免费无专码区 | 91最新在线观看 | 天天看天天干天天操 | 又色又爽又黄高潮的免费视频 | 五月色丁香 | 亚洲精品国产欧美在线观看 | av在线播放快速免费阴 | 久久视频这里只有精品 | 在线视频电影 | 亚洲国产精彩中文乱码av | 成人宗合网 | 亚洲天天摸日日摸天天欢 | 99视频在线免费播放 | 久久综合久久综合这里只有精品 | 91在线观看视频 | 国语精品久久 | 就要干b| 狠狠综合网 | 欧美一级小视频 | 日日操网站 | 欧美日韩伦理在线 | 一区二区三区动漫 | 久久成年视频 | 涩涩网站在线播放 | 天天操天天拍 | 青青河边草免费直播 | 亚洲免费av一区二区 | 欧美一二区视频 | 亚洲国产片 | 亚洲成人精品在线观看 | 欧美日韩在线看 | 日韩中字在线 | 国产高清 不卡 | 午夜精品视频一区二区三区在线看 | 天天色天天骑天天射 | 久草久草在线观看 | a黄色一级 | 日日婷婷夜日日天干 | 精品国产一区二区三区不卡 | 91久久国产自产拍夜夜嗨 | www.五月天婷婷 | 免费大片黄在线 | 国产专区日韩专区 | 成人av一级片 | 在线观看免费成人av | 特黄免费av| 天天插天天操天天干 | 99在线免费视频 | 国产精品二区在线 | 久草视频免费播放 | 四季av综合网站 | 久久香蕉影视 | 国产区 在线 | 国产精品日韩精品 | 亚洲视频精品在线 | 日韩特级黄色片 | 国产五月色婷婷六月丁香视频 | 在线播放视频一区 | 日本少妇久久久 | 成年人电影免费看 | 在线免费av网站 | 韩国av免费在线 | 一区二区免费不卡在线 | 国产精品h在线观看 | 国产一二三四在线视频 | 精品一区久久 | 久草香蕉在线 | 成人欧美一区二区三区在线观看 | 日躁夜躁狠狠躁2001 | 婷婷日日| 手机看片福利 | 91色蜜桃 | 91漂亮少妇露脸在线播放 | 婷婷色影院 | 日本精品久久久久中文字幕5 | 国产一级做a爱片久久毛片a | 国产精品99久久久久久人免费 | 国产精品久久av | 国产大片黄色 | 91成人久久 | 91精品视频在线 | 99精品小视频| 日本不卡一区二区三区在线观看 | 国产精品女人网站 | 在线亚洲欧美日韩 | 国产亚洲成av片在线观看 | 四虎影视国产精品免费久久 | 日韩在线观看视频一区二区三区 | 国产伦精品一区二区三区无广告 | 日韩欧美在线综合网 | 99精品热视频只有精品10 | 五月天中文字幕 | 国产精品18久久久久久不卡孕妇 | 最近中文字幕高清字幕在线视频 | 久久久国产日韩 | 久久久久97国产 | 日韩欧美91 | 国产精品久久久久久久久免费看 | 国产99自拍 | 九九99| 婷婷亚洲五月 | 日韩欧美国产视频 | 国产精品美女久久久久久 | 伊人夜夜 | 成人免费共享视频 | 91午夜精品 | 国产精品久久久久久久av大片 | 国产精品刺激对白麻豆99 | 国产日韩精品在线观看 | 日韩欧美91 |