亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Makefile自動化構(gòu)建實戰(zhàn):從核心語法到工程實踐

Makefile自動化構(gòu)建實戰(zhàn):從核心語法到工程實踐 1. 從一段真實經(jīng)歷說起為什么你需要make老手可能早就離不開make了但如果你是剛接觸Linux開發(fā)的新手或者一直用小項目、單文件代碼“裸編”過來的那我建議你認(rèn)真看完這篇文章。我當(dāng)年第一次接手一個稍微像樣一點的C項目幾十個源文件需要在終端里一條一條敲gcc命令頭文件改一個就要重新編譯一堆文件編譯選項還特別長偶爾敲錯一個參數(shù)就得從頭排查。那段時間每次“編一下跑一下”都像在玩掃雷整個人都很痛苦。后來某位同事讓我看了他項目里的Makefile我才反應(yīng)過來這東西就是在幫你把編譯、打包、清理這些重復(fù)勞動全部自動化。簡單說make是一個自動化構(gòu)建工具而Makefile是給make讀的“構(gòu)建劇本”里面寫清楚目標(biāo)文件怎么生成、依賴哪些源文件、用什么命令生成。有了它你在終端里只需要敲一個 make剩下的編譯、鏈接、輸出可執(zhí)行文件全部自動完成。就算改了十幾個文件make也能精準(zhǔn)識別哪些需要重編哪些不用動比全量重編快得多。這篇文章我不會跟你念man手冊。我只講兩件事一是Makefile的底層邏輯和核心語法到底怎么用二是我在實際項目里踩過的坑、驗證過的寫法。按這套思路走不管你之后是做嵌入式、Linux服務(wù)端、還是搞開源項目都能很快寫出能用的Makefile并且知道每行在干什么。2. Makefile三要素目標(biāo)、依賴、命令之間的關(guān)系2.1 先把三要素掰開揉碎所有Makefile不管寫得多花哨本質(zhì)都是若干個“規(guī)則”。一條規(guī)則長這樣target: prerequisites command三部分分別是目標(biāo)target你要生成的東西可以是一個可執(zhí)行文件、一個.o文件也可以是一個動作名比如clean。依賴prerequisites生成目標(biāo)之前必須具備的文件或其他目標(biāo)。多個依賴之間用空格分隔。命令command真正干活的shell命令通常就是編譯、鏈接、拷貝這些。命令前面必須是一個Tab縮進不是四個空格不是兩個空格是Tab。這個坑我后面單獨說因為幾乎所有新手都在這里翻車。舉一個最直觀的例子hello: hello.o gcc -o hello hello.o hello.o: hello.c gcc -c hello.c -o hello.o第一條規(guī)則說要生成hello就得先有hello.o然后執(zhí)行g(shù)cc把hello.o鏈接成可執(zhí)行文件hello。第二條規(guī)則說要生成hello.o得有hello.c然后執(zhí)行g(shù)cc把hello.c編譯成hello.o。你在終端敲make的時候make會先讀Makefile找到第一個目標(biāo)hello然后檢查它的依賴hello.o。如果hello.o不存在make就會去找hello.o對應(yīng)的規(guī)則先編譯出hello.o再回來鏈接出hello。整個過程是自動遞歸的很像一個“依賴樹”。這是理解make工作的關(guān)鍵它不是一個簡單的從左到右執(zhí)行腳本的工具而是以目標(biāo)為導(dǎo)向先算依賴關(guān)系再決定執(zhí)行哪些命令。2.2 make真正厲害的地方增量編譯不用make的時候手動編譯最煩的就是每次都要把全部文件重新編一遍。大型項目幾十個文件還好幾百個文件的時候一次全量編譯可能要幾分鐘甚至十幾分鐘而你只是改了一行代碼。make天生就是為了解決這個問題——它通過比較目標(biāo)文件和依賴文件的時間戳來決定是否重新生成目標(biāo)。舉個具體的流程你改了一個源文件那個文件對應(yīng)的.o目標(biāo)文件的時間戳就會比源文件舊make發(fā)現(xiàn)“哦這個目標(biāo)過期了”于是只重新編譯這個源文件。其他沒改動的文件目標(biāo)比依賴新make直接跳過。最后再重新鏈接一次。這就是增量編譯幾百個文件的項目修改單個文件后的構(gòu)建可能只需要幾秒鐘實際效果很驚人。2.3 命令行里的空格與Tab問題說實話這是我在各種技術(shù)社區(qū)里看到最多、最經(jīng)典的報錯現(xiàn)場Makefile:3: *** missing separator. Stop.這個錯誤幾乎都是命令前面用了空格而不是Tab。為什么make只認(rèn)Tab這是歷史設(shè)計問題但你必須接受它。很多編輯器會在配置里默認(rèn)把Tab轉(zhuǎn)換成空格這就會讓你的Makefile“看起來對齊了但實際沒法跑”。我目前的習(xí)慣是用Vim寫Makefile的時候在.vimrc里強行關(guān)閉expandtab并且設(shè)置自動縮進寬度為8用VS Code就把editor.insertSpaces設(shè)為false保證編輯的文件里插入的是真正的Tab字符。如果實在判斷不清可以在Vim里輸入set listTab字符會顯示為^I空格是普通的小點一眼就能分辨。2.4 偽目標(biāo)清理操作的隱藏陷阱你可能已經(jīng)注意到我前面提到的clean目標(biāo)并不是一個真實文件名。它只是一個動作標(biāo)簽。如果你真的在目錄里放了一個叫clean的文件再執(zhí)行make clean的時候make會發(fā)現(xiàn)clean這個“目標(biāo)”已經(jīng)存在了而且沒有依賴時間戳永遠比依賴新于是它直接告訴你“clean是最新的”不會執(zhí)行rm命令。解決這個問題的標(biāo)準(zhǔn)寫法就是..PHONY: clean clean: rm -f *.o hello.PHONY的完整形式是.PHONY: clean嗎其實標(biāo)準(zhǔn)寫法是clean:本身就是規(guī)則目標(biāo)而.PHONY: clean這行是聲明格式就是clean:后面跟你的規(guī)則。這行聲明告訴makeclean不能當(dāng)作文件名來看待它的作用是“命令標(biāo)簽”每次都要執(zhí)行就算同名文件已經(jīng)存在也一樣執(zhí)行。不僅clean像all、install、test這種動作型目標(biāo)都建議聲明為.PHONY防止和同名文件沖突。3. 變量和自動化變量讓Makefile從“寫死”變“通用”3.1 用變量管好你自己的編譯參數(shù)剛開始寫Makefile的時候你可能會把編譯命令一行行寫死比如每個.o規(guī)則都是gcc -Wall -g -c xxx.c -o xxx.o。三個文件還行十幾個文件的時候你光改一個編譯選項比如加一個-stdc99就得改十幾行而且很容易漏。變量的引入就是為了解決這種重復(fù)勞動。Makefile里的變量定義和引用很有特點CC gcc CFLAGS -Wall -g -O2 -stdc99 LDFLAGS -lm hello: hello.o utils.o $(CC) $(LDFLAGS) -o hello hello.o utils.o hello.o: hello.c $(CC) $(CFLAGS) -c hello.c -o hello.o utils.o: utils.c $(CC) $(CFLAGS) -c utils.c -o utils.o變量用定義用$(變量名)引用。這樣修改編譯器或者編譯選項的時候只需要改開頭那幾行后面的規(guī)則全部自動生效。把變量定義集中到Makefile頂部幾乎可以算是一種行業(yè)習(xí)慣你去看那些開源項目基本鋪滿了一堆變量定義。變量賦值還有幾種寫法我用過一次就比較有印象遞歸展開式賦值變量的值是“最后時刻”的展開結(jié)果。比如A $(B) B hello這時$(A)展開之后是hello因為直到真正使用的時候才去解析B的值。:直接展開式賦值立刻把右邊的值計算好存下來。如果你想避免循環(huán)引用和二次解析帶來的意外用:更穩(wěn)。?如果變量之前沒有賦值就給它賦這個值常用于讓用戶可以通過命令行覆蓋默認(rèn)參數(shù)。追加內(nèi)容適合分步添加編譯選項。我自己寫Makefile的時候一旦涉及多個相互引用的變量都會傾向用:因為這樣變量的解析是確定的不會因為賦值順序不同而出現(xiàn)詭異的展開結(jié)果。你可以把理解成“活引用”:是“快照”大多數(shù)場景下快照更可控。3.2 自動化變量自動化變量的實操價值手動在每條規(guī)則里把目標(biāo)名和依賴名都寫一遍依然是重復(fù)勞動。make提供了一套自動化變量專用來在規(guī)則命令中表示目標(biāo)、依賴等信息最常用的有三個$表示當(dāng)前規(guī)則的目標(biāo)文件名。$^表示當(dāng)前規(guī)則的所有依賴文件名會自動去重。$表示當(dāng)前規(guī)則的第一個依賴文件名。拿前面的例子重寫立刻會清爽很多hello: hello.o utils.o $(CC) $(LDFLAGS) -o $ $^ hello.o: hello.c $(CC) $(CFLAGS) -c $ -o $ utils.o: utils.c $(CC) $(CFLAGS) -c $ -o $第一條規(guī)則里$會被替換成hello$^變成hello.o utils.o。第二條規(guī)則里$是hello.c$是hello.o。這樣不管以后新增多少源文件規(guī)則主體幾乎不用改。還有兩個不那么常用但偶爾能救命的$?比當(dāng)前目標(biāo)更新的依賴文件列表常用于部署場景比如只在某些源文件變化后重新執(zhí)行歸檔命令。$*模式匹配中匹配到的那部分文件名后面講模式規(guī)則時會用到。3.3 通配符和模式規(guī)則批量處理源文件沒有模式規(guī)則之前每個.c文件都要對應(yīng)一條獨立的編譯規(guī)則項目里幾十個源文件就得復(fù)制幾十條看著就累。make支持模式規(guī)則用%做通配符可以把一類文件的構(gòu)建規(guī)則濃縮成一條。%.o: %.c $(CC) $(CFLAGS) -c $ -o $這行規(guī)則的含義是任何.o文件只要有一個同名的.c文件作為依賴就用后面這條命令編譯。加上之前講的目標(biāo)規(guī)則整個Makefile可以濃縮成CC gcc CFLAGS -Wall -g -O2 LDFLAGS -lm OBJS hello.o utils.o hello: $(OBJS) $(CC) $(LDFLAGS) -o $ $^ %.o: %.c $(CC) $(CFLAGS) -c $ -o $ clean: rm -f $(OBJS) hello .PHONY: clean這個Makefile已經(jīng)接近我平時使用的實際形態(tài)了。新增一個源文件的時候我只需要在OBJS變量里加一個對應(yīng)的.o文件名其他都不用動。這才是自動化構(gòu)建工具該有的效率。但是手動維護OBJS這個列表還是有一點讓人不放心——如果忘了把新文件加進去make不會自動感知新出現(xiàn)的.c文件。更好的辦法是用函數(shù)自動收集目錄下所有源文件。4. 函數(shù)和include讓Makefile自己學(xué)會找文件4.1 wildcard和patsubst兩個高頻函數(shù)make內(nèi)置了不少函數(shù)寫法看起來像變量引用但帶個符號。我平常用得最多的是這兩個SRCS $(wildcard *.c) OBJS $(patsubst %.c,%.o,$(SRCS))$(wildcard *.c)查找當(dāng)前目錄下所有.c文件返回一個以空格分隔的文件名列表。就算新拖進來一個源文件SRCS也會自動帶上它你完全不用手動維護。$(patsubst %.c,%.o,$(SRCS))把SRCS里每個.c后綴替換成.o后綴得到對應(yīng)的目標(biāo)文件列表。這樣整個Makefile就可以改成CC gcc CFLAGS -Wall -g -O2 LDFLAGS -lm SRCS $(wildcard *.c) OBJS $(patsubst %.c,%.o,$(SRCS)) TARGET app $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $ $^ %.o: %.c $(CC) $(CFLAGS) -c $ -o $ clean: rm -f $(OBJS) $(TARGET) .PHONY: clean這個版本已經(jīng)具備“項目級”感覺了。你把任意一個只有.c文件的目錄交給它它都能自動識別并構(gòu)建出可執(zhí)行文件app。但別太高興這套寫法有一個大問題它完全沒有處理頭文件依賴。如果你修改了一個頭文件只有include這個頭文件的.c文件才會檢測到變化嗎不會。make只比較.c和.o的時間戳根本不知道頭文件參與其中。這就引出了Makefile里最隱蔽、也最容易引發(fā)線上問題的topic之一。4.2 頭文件依賴大部分新手栽跟頭的地方舉個例子main.c里include了utils.h你改了utils.h里的一個宏定義期望main.o重新編譯。但make會發(fā)現(xiàn)main.c沒有變main.o和main.c的時間戳相比沒過期于是它直接不重新編譯main.o最后鏈接出來的程序還是老版本。這種“改了沒反應(yīng)”的問題非常隱蔽查起來也費勁。解決思路是讓.o的依賴?yán)锇黫nclude的所有頭文件。你可以手動寫main.o: main.c utils.h但每個文件include哪些頭文件多了之后手動維護完全不堪重負(fù)還不如讓編譯器幫你統(tǒng)計。GCC提供了-MM選項可以輸出源文件對應(yīng)的頭文件依賴列表gcc -MM main.c輸出大概是main.o: main.c utils.h common.h這正好是make能用的依賴規(guī)則。利用GCC的-M家族選項可以讓Makefile自動生成并包含這些依賴信息。目前我見過、也實際使用的是下面這套方案SRCS $(wildcard *.c) OBJS $(patsubst %.c,%.o,$(SRCS)) DEPS $(patsubst %.o,%.d,$(OBJS)) %.o: %.c $(CC) $(CFLAGS) -MMD -MP -c $ -o $ -include $(DEPS)-MMD在編譯的同時生成一個.d文件里面記錄當(dāng)前.c文件包含的頭文件依賴。-MP為每個頭文件生成一個空的偽目標(biāo)防止頭文件被刪除后make報錯找不到規(guī)則。-include和include不同即使.d文件不存在比如第一次清理后也不會報錯make會繼續(xù)執(zhí)行。每次編譯時.d文件都會被刷新頭文件依賴自動更新。你再也不用手動維護頭文件列表了。這套方案從我第一次用到現(xiàn)在一直很穩(wěn)幾乎成了我的標(biāo)準(zhǔn)配置。4.3 小心make的天然“遞歸陷阱”自動化收集源文件還有個邊角問題如果項目里有子目錄源文件分布在多個目錄wildcard *.c只能搜到當(dāng)前目錄搜不到子目錄。你可以在每個子目錄里放一個子Makefile然后在根目錄Makefile里遞歸調(diào)用子make這是很多中型項目采用的方式。但遞歸make不是萬靈藥跨目錄的依賴追蹤會變復(fù)雜。另一種做法是收集所有子目錄的源文件統(tǒng)一在當(dāng)前Makefile里編譯SRCS $(wildcard *.c) $(wildcard src/*.c) OBJS $(patsubst %.c,%.o,$(SRCS))這種情況下編譯生成的.o仍然放在各自源文件所在的目錄里不會污染頂層目錄。如果項目繼續(xù)變大、目錄越來越多我建議你還是考慮構(gòu)建系統(tǒng)比如cmake。但就算用cmake理解make和Makefile的思維模式依然是必不可少的底層能力因為cmake最終生成的可能是Makefile而且很多詭異的構(gòu)建問題最終都要追到make那一層去查。5. 實操手記一個多文件項目的構(gòu)建拆解5.1 從零搭一個“有點真實感”的小項目光講語法用處不大我拿一個小項目來完整走一遍。項目結(jié)構(gòu)是這樣project/ ├── Makefile ├── include/ │ └── utils.h └── src/ ├── main.c └── utils.c需求main.c里調(diào)用utils.c中的函數(shù)utils.h放在include目錄下編譯時要把include目錄加進頭文件搜索路徑。頭文件在不同目錄編譯命令里就要加-I參數(shù)。Makefile可以這么寫CC gcc CFLAGS -Wall -g -O2 -Iinclude LDFLAGS -lm SRCS $(wildcard src/*.c) OBJS $(patsubst %.c,%.o,$(SRCS)) DEPS $(patsubst %.o,%.d,$(OBJS)) TARGET app $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $ $^ %.o: %.c $(CC) $(CFLAGS) -MMD -MP -c $ -o $ clean: rm -f $(OBJS) $(DEPS) $(TARGET) -include $(DEPS) .PHONY: clean注意自動生成的.o和.d文件都在src目錄里沒有把主目錄弄亂。執(zhí)行make輸出大致是gcc -Wall -g -O2 -Iinclude -MMD -MP -c src/main.c -o src/main.o gcc -Wall -g -O2 -Iinclude -MMD -MP -c src/utils.c -o src/utils.o gcc -lm -o app src/main.o src/utils.o我親手驗證過這個流程編譯、鏈接、生成可執(zhí)行文件一氣呵成。然后我故意改了include/utils.h里的一個結(jié)構(gòu)體定義再次執(zhí)行make它立刻重新編譯了main.o和utils.o這正是依賴自動生成以后的效果。5.2 編譯流程中的關(guān)鍵一步鏈接順序有兩個源文件以上就會遇到鏈接順序問題特別是用了靜態(tài)庫的時候。比如utils.o里用了數(shù)學(xué)庫函數(shù)鏈接命令要寫成-lm放在對象文件的后面。很多新手寫鏈接命令會把庫放在最前面結(jié)果鏈接器報undefined reference錯誤。# 錯誤示例 gcc -lm -o app main.o utils.o # 正確示例 gcc -o app main.o utils.o -lm鏈接器是按順序掃描輸入文件的它記住的是尚未解析的符號當(dāng)它掃到app的時候還沒有看到任何對象文件掃到utils.o里的未解析符號之后再遇到-lm才能找到對應(yīng)的實現(xiàn)。把-lm放前面等于提前把庫讀了后面遇到需要解析的符號已經(jīng)來不及了。這個經(jīng)驗我在博客里反復(fù)提過因為真的很容易被忽略。5.3 一套清晰的目錄清理方案clean目標(biāo)要記得把自動生成的.d也刪掉否則清理后重新構(gòu)建會誤用舊的依賴信息。我前面那份Makefile里已經(jīng)包含clean: rm -f $(OBJS) $(DEPS) $(TARGET)在規(guī)模大一點的項目里我還會加一個distclean目標(biāo)用來清掉比clean更徹底的構(gòu)建產(chǎn)物比如編譯緩存目錄和.config文件。這種命名習(xí)慣來自開源社區(qū)傳統(tǒng)看到distclean一般人都能猜到它的用途。如果你自己造一個remove_all這種名字也不是不行只是別人看你的Makefile會覺得有點微妙。6. 命令行使用技巧和常見問題排查實錄6.1 常用命令行參數(shù)用得順手的幾個make的命令行參數(shù)本身就是一門小課我挑幾個平時最常用的說一下make -n打印出會執(zhí)行的命令但不真正執(zhí)行。改完Makefile想檢查一下邏輯先跑一遍-n既安全又直觀。make -B強制重新生成所有目標(biāo)無視時間戳。有些時候你懷疑增量編譯狀態(tài)不對可以用它做一次干凈的驗證。make -j4并行編譯4表示同時運行4個編譯任務(wù)?,F(xiàn)在的機器動不動8核16核-j$(nproc)可以直接自動填滿CPU大型項目編譯時間能縮短很多。make -C dir切換到指定目錄再執(zhí)行make。在頂層腳本里遞歸調(diào)用子項目時很有用。make V1這個參數(shù)不是make原生參數(shù)而是在Makefile里自己支持的。通過判斷V變量來決定打印詳細(xì)編譯命令還是簡化的提示信息。很多開源項目都支持V1輸出完整命令調(diào)試編譯選項的時候非常有用。6.2 幾個高頻報錯和排查思路做一個速查表都是我或者身邊同事實際碰到過的場景報錯信息常見原因解決辦法missing separator命令前面用了空格而不是Tab把空格換成真正的Tab用編輯器關(guān)閉自動轉(zhuǎn)空格No rule to make target xxx.o對應(yīng)的.c文件不存在或路徑不對檢查SRCS收集方式確認(rèn)文件有沒有在正確目錄下target xxx doesnt match the target pattern模式規(guī)則里的%匹配不到預(yù)期內(nèi)容檢查.o和.c是否同名檢查模式規(guī)則是否寫錯undefined reference to function鏈接順序不對或沒有鏈接對應(yīng)的庫調(diào)整庫參數(shù)順序確認(rèn)庫路徑和庫名正確file changed as we read it編譯過程中源文件被改動了多半是編輯器后臺自動格式化保存時沖突重新make即可make: Nothing to be done目標(biāo)已是最新沒有需要重新生成的正常情況想強編用make -B6.3 調(diào)試技巧打印變量和拿Makefile當(dāng)Python寫遇到變量展開不符合預(yù)期的時候最快的辦法是在Makefile里加一行$(info SRCS $(SRCS)) $(info OBJS $(OBJS))執(zhí)行make的時候這兩行會直接把變量值打印出來方便你確認(rèn)文件收集是否正確。比你在腦子里推演快得多。如果只想在調(diào)試模式下輸出還可以配合ifeq判斷ifdef DEBUG $(info CFLAGS $(CFLAGS)) endif然后執(zhí)行make DEBUG1它就會額外打印編譯選項。6.4 處理文件名中的“特殊情況”如果說還有哪個地方在實際開發(fā)中經(jīng)常弄出麻煩那就是文件名或路徑里的空格。Linux下文件系統(tǒng)是允許路徑帶空格的但Makefile對空格極其敏感。如果項目路徑里有空格patsubst和wildcard返回的列表會被空格拆開導(dǎo)致make把一個文件名當(dāng)成兩個文件處理。一個臨時方案是給變量里的路徑加上轉(zhuǎn)義但那個寫法又長又丑。更好的方案是別讓項目路徑帶空格這是最省事的解法。Windows下帶入路徑到Linux環(huán)境時記得檢查一下目錄名。反正我現(xiàn)在的習(xí)慣是創(chuàng)建任何開發(fā)相關(guān)目錄都只用字母、數(shù)字、下劃線絕對不用空格和中文這是從多個構(gòu)建工具不只是make的承平年代里總結(jié)出來的血淚經(jīng)驗。7. 從Makefile到更復(fù)雜的構(gòu)建系統(tǒng)7.1 讓Makefile支持多種構(gòu)建類型如果你發(fā)現(xiàn)項目開始區(qū)分debug版和release版可以這樣寫B(tài)UILD ? release ifeq ($(BUILD),debug) CFLAGS -Wall -g -O0 else CFLAGS -Wall -O2 endif執(zhí)行make BUILDdebug就是調(diào)試版不帶參數(shù)默認(rèn)是release版。這種設(shè)計模式移植到其他構(gòu)建系統(tǒng)也很常見。它讓Makefile變得像一個小型配置系統(tǒng)對中小項目來說夠用且高效。7.2 自動安裝目標(biāo)實際發(fā)版的時候我還會加一個install目標(biāo)把編譯好的可執(zhí)行文件拷貝到指定目錄PREFIX ? /usr/local install: $(TARGET) install -m 755 $(TARGET) $(PREFIX)/bin/?確保用戶可以通過make install PREFIX/opt/mytool覆蓋安裝路徑。同時install目標(biāo)依賴$(TARGET)所以它會先確保編譯完成再執(zhí)行安裝命令。這樣整個構(gòu)建、安裝流程就串起來了。7.3 什么時候該從make遷移到cmakeMakefile不是萬能的。當(dāng)項目開始出現(xiàn)以下信號我會認(rèn)真考慮遷移到cmake需要生成并安裝動態(tài)庫、靜態(tài)庫、可執(zhí)行文件多種產(chǎn)物需要跨平臺Windows、Linux、macOS構(gòu)建需要處理復(fù)雜的條件編譯、第三方依賴查找項目多人協(xié)作希望構(gòu)建系統(tǒng)自動探測環(huán)境。cmake通過CMakeLists.txt描述構(gòu)建邏輯能生成對應(yīng)平臺的構(gòu)建腳本比如Linux下可以生成MakefileWindows下可以生成Visual Studio工程。但學(xué)cmake前我依然建議先吃透Makefile因為make的規(guī)則、依賴、變量和編譯參數(shù)這些底層概念在cmake里全都換了個形式出現(xiàn)底子不牢的話cmake里的target、interface這些抽象會讓你更迷失。8. 一些實實在在的經(jīng)驗和碎碎念寫到這里主體內(nèi)容基本講完了。最后分享幾個我個人在實際操作中的體會希望對你有幫助。第一Makefile不是背出來的是“用”出來的。你拿一個小項目反復(fù)改、反復(fù)跑很快就能把語法記牢。我一直覺得構(gòu)建工具的掌握程度應(yīng)該以“出了問題能不能自己查”為標(biāo)準(zhǔn)而不是能默寫多少函數(shù)名。第二調(diào)試Makefile問題的時候先分清是“語法錯誤”還是“邏輯錯誤”。語法錯誤通常一眼能瞄出來比如缺Tab、少冒號邏輯錯誤才真正燒腦比如改動沒觸發(fā)重編、依賴漏了頭文件。這種時候用make -d可以輸出極詳細(xì)的調(diào)試信息配合$(info ...)打印變量多試幾次總能找到癥結(jié)。第三保持Makefile簡單干凈。很多人為了炫技會把Makefile寫得像腳本語言用一堆嵌套函數(shù)和條件判斷。其實Makefile的可維護性跟代碼一樣重要。我見過一個幾千行的“新一代”Makefile最后沒人能改得動。克制是第一原則。第四建議你用版本管理工具管理Makefile。它就像你的源代碼一樣被多個人修改和review出了問題可以快速回退。最后再說一個小技巧。如果你和我一樣經(jīng)常要在一個目錄里反復(fù)調(diào)試編譯可以把debug和release兩種配置都寫在同一個Makefile里然后用一個變量去切換。我第一次用這個模式的時候還不以為意但項目一旦大起來這種小小的“配置化”思路會幫你省掉非常多改參數(shù)的時間。構(gòu)建工具的本質(zhì)就是讓機器去做重復(fù)勞動人只負(fù)責(zé)定義規(guī)則。make讓這件事變得足夠輕、足夠直接所以三十多年過去了它依然是Linux開發(fā)繞不開的基本功。希望能幫你在構(gòu)建這條路上少踩幾個坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
开心婷婷五月| 999精品久久久久久久| 五月天精品| 99久久精品无码一区二区毛片免费| 中文字幕超碰CAO| 天天插天天射| 日韩人妻无码专区| 黄色一区二区秘书性感| 中国国产精品一区视频| 婷婷六月色开| 亚洲二区精品在线观看| 九九这里只有精品| 久久婷婷六月综合| 日韩九区| 九九热超碰| 在线播放免费av福利片| 99国产精品| 偷拍新久久| 亚洲美女30b| 日韩97超碰中文字幕| 亚洲成人免费在线| 人人透人人操| 亚洲图片偷拍视频区| 九九综合久久中文字幕| 乱伦一二三区| 色欲Av人妻精品一区二| 在线A日本| 欧亚在线视频| 久久99热这里只频精品6学生| 国产乱伦性爱AV| 国产麻豆一级精品视频| 久久香蕉国产线看观看猫咪av| 婷婷伊人五月| 天天懆天天日| 欧美aa一级片| 国产亚洲中文不卡二区| 亚洲欧美自拍偷拍| 强奸乱伦av电影| 国产无马av| 爽 好舒服 无码刺激久久| 在线国产福利网址导航| 人妻一区视频| 久久免费精品视频免一| 亚洲精品丝袜| 精品夜夜澡人妻无码AV| 久久久久少妇| 性色av大全| 亚洲欧洲日本精品中文a∨| 色欲三区| 人人摸人人干人人拍97| AV无码久久久精品| 丁香六月婷婷久久综合| 91精品久久久久久77777| 亚洲日韩乱码中文无码蜜桃臀网站| 妇女视频网站| 啊啊啊在线看| 人妻丝袜一区二区三区在线| 日韩欧美性爱电影在线观看| 操逼视频国产无套| 亚洲中文字幕精品久久久久久直播| 人人扣人人操| 亚洲精品丝袜| 91在线丝袜| 94色色电影网| 亚洲色 国产 欧美 日韩| 夜色AV无码手机在线影院| 爆操无码| 天天摸夜夜摸| 超碰午夜| 亚洲少妇在线观看| 国产69精品久久久久99尤物| 丝袜美腿诱惑亚洲欧美视频在线观看| 99re95| 色香伊人| 国产成年女黄特黄| 亚洲色色探花| 亚洲瓯美色图| AV天堂因数| 国产无吗在线播放| 成片免费观看视频大全| 欧美白嫩在线放| 精品少妇高潮久久| 草草影院最新网址| 嗯阿好爽好紧| 亚洲毛片基地专区| 激情久久久| 九久9热| 欧美综合777| 国产精品一二三区18| 亚洲天堂人妻熟妇视频| 蜜臀久久99精品久久久| 91人妻做a观看视频| 天天欧美色| 91精品导航| 亚洲自拍天堂| 欧美日韩人人精品| 黄片www视频免费| 亚洲一区二区中文字幕| 久久超碰大香蕉| 91殴美| 日本一级黄色电影| 九月伊人中文字幕| 大香蕉在线视频15| 综合色好色| 国产精选三级在线观看| 久久 久久国内精品亚洲| 久久一二三四| 欧美性爱五月天| 中文字幕欧美日本乱码一线二线| 黑人无码一区二区| 嗯嗯啊啊日韩精品| 久久久久久国产精品免费网站| 欧美爆操91| 亚洲国产欧美一区二区潘金莲| 性爱综合网| av日韩中文字幕| 综合操逼| 欧美性性性| 精品一二三区久久AAA片| 国产综合久久久鬼色| 黄片www视频免费| 大香蕉亚洲中文| 国产精品久久泡妞网站| 久久精品小视频| 日日摸天天爽夜夜欢| 亚洲婷婷五月天| 少妇的嫩逼图片| 狠狠综合网| 人妻熟妇一区二区三区| 亚洲欧美校园另类春色| 91丨国产丨白浆秘 洗澡动漫| 99啪啪视频| 五码视频在线观看| 激情四射婷婷六月天| 乱伦3P视频| 九九这里只有精品| 色哟哟国产精品免费网址| 免费中文综合精品| 无码久| 很很热性爱视频| 欧美综色欧| 9久热| 97碰久久| 东北女人操比视频| 看一级黄色视频| 日日夜夜精品视频| 亚洲诱惑| 亚洲五月婷婷| 69XX一中文字幕人妻91| 欧美乱妇狂野欧美在线视频| 五月丁香综合啪啪| 欧美成年人性爱视频免费观看| 精品久久久久9999| 国产九九九九九九九九| 爱爱动态60秒| 国产精品久久久九九九| 国产成人网址| 欧美一级久久久久久久大片动画| 亚洲国产97在线精品一区| 亚洲日韩一区电影| 婷婷五月天综合网| 亚洲97久久精品亚洲| 久久久亚洲熟妇资源| 97中文天堂| 日韩综合成人免费视频| 太久视频| 97av在线观看| 久久久成人免费av电影| 蜜桃精久三区| 综合久久中文字幕综合日韩精品| 亚洲日韩在线a不卡99精品| 国产风韵犹存熟妇三区| 亚洲人在线成线成人| 岛园激情| 美国日韩黄色片| 九九AV| 91美女高潮| 91女网站| 伊人AAA| 18禁免费视频| 蜜乳中文字幕a在线| 91M一社| 91欧美偷拍| 日本理论在线| 人人操人人搞人人草| 久久精品黄色| 久久久涩| 亚洲色欧| 人人摸人人舔一区二区| 99xav| 成人 日韩欧美一区| 园内精品自拍视频在线播放| 中国人高清www色视频免费| 热久久无毒不卡| 狠狠图片青青草| 吻戏激情性巴克| 午夜高清成人在线视频| 欧美日韩岛国大片在线观看| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧洲精品欧洲精品| 五月天综合网| 富二代亚洲精品99| 亚洲欧洲无码97久久精品| 91亚洲精品青草| 久久99网站| 91精品人妻电影| 四虎影视永久在线免费| 丁香五月自拍| 国产精品交换一区二区| 夜夜嗨一区二区| 日本 欧美 亚中文字幕| 五月婷婷六月丁香| 一区二区三区四区五区高清无码永久视频 | 亚洲国产精品V?在线播放| 日韩精品在线放| 日韩国产十八禁| 97精品国产手机| 中国AV美女| 伊人网在线视频| 在线欧美69V免费观看视频| 蜜臀av在线播放一区二区三区| 欧美熟女操屄| 欧亚免费视频| 九九热九九| 99自拍视频在线观看| 久久精品性| 中字乱伦AV| 久久久九97| 草b在线 | 久久9999| 黄色工厂这里只有精品| 舔足天天操天天射| 久久香蕉综合一本到3atv| 亚洲aV无码成人在线观看| 国产精品久久久三级无码| 亚洲AV无码乱码在线观看性色| 亚洲日韩精品在线播放| 男人天堂.AB| 欧美日韩少妇色情| 欧美亚洲韩国视频十五区| 欧美成人精品一区| 婷婷操逼| 欧美日韩色图片| 久久超碰、| 久久机热| 国产二区三区免费视频| 99国产在线 精品 视频| 99热综合| 天天激色| 97手机日韩| 精品国产91av一区二区三区| 亚洲无码99| 成人五月天色网| 国产在线激情| 黄片色区软件| 内射黑人| 色欧美综合| 亚洲阿v天堂无码z2018| 婷婷五月激情综合| 97频视在线| 国产免费内射视频| 久9视频| 欧美嗯啊……在线观看视频免费| 97热视频在线观看| V A在线| 色久桃花影院在线观看| 久久久无码国精品无码三区三区| 亚洲素人网| 国产毛片毛片4p懂色| 欧美性爱伊人| 啊啊啊好大好湿| 日本欧美中文字幕| 丁香六月婷| 日韩不卡一二三四| 不卡av在线中文字幕| 99热这里都是精品| 4tube欧美女厕所| 91精品国产日韩欧美综合| 久久国产99精品72福利| 麻豆av一区二区| 香蕉人人操tv| 蜜桃AV天堂| 久久久亚洲高清不打码| 裸模AV女优| 亚洲综合影院| 久久久精品日本一道| 日韩天天综合| 任你草| 国产丁香精品露脸视频| 精品性爱无码在线播放| 嗯,啊。舔我逼| 思思热免费在线视频| 97人人中文网| 国产强奸91| 国产熟妇一区二区| 日本一区二区三区四区免费观看| 9999亚洲电影| 另类天堂| 你懂的在线观看区国产| 另类亚洲图色| 亚洲一卡二卡在线免费| 东北女人的毛片| 岛国片在线视频网站| 国产高清1234区| 欧美乱伦专区| 97超碰久| 操99| 精品九九九九| 97超碰中文| 把腿张开老子CAO烂你| 国产精品久久久久久久久久久久久久久久 | 欧美黄色手机在线观看| 亚洲不卡不卡中文字幕不卡 | 好爽,再快点啊哈嗯嗯嗯嗯| 曰韩人妻中文字幕在线| 中文字日本乱码| 两女互慰AV高潮喷水在线观看| 久久超碰免费的| 中文字幕精品一区二区精| 大香蕉青青9| 日韩性爱视频在线免费观看| 久久久久国产精品人妻aⅴ天堂| 一本一道波多野毛片中文在线| 青青草久久| 伊人五月天| 色色九区| 啊啊啊不要好爽日韩无码一区| 国产亚洲日韩欧| 青青操在线亚洲视频观看欧美在线| 日韩一级久久毛片| 加勒比伊人综合| 国产精品一区二区黄片| www.yeyecao| 色偷偷综合91久久噜噜| 黑丝少妇麻豆| 欧美性爱伊人| 国产精品露脸在线观看| 四虎AV在线播放| 中文字幕乱码人妻一区二区三区,99精品 | 91这里只有精品| 亚洲成人精品久久久| 蜜乳Av成人片网站| 91美女视频在线观看| 青青草色情网站视频| 久久久夜夜嗨免费视频| 国产一级舔足在线观看| 亚洲91射| 狠狠亚洲| 欧美亚洲玖玖玖| 26uuu欧美日韩| 青青草原香蕉日本Ap| 中文字幕丝袜人妻| 亚洲nv男人的天堂网| 日韩在线一区高清在线| 欧美日韩在线小说| 中文字幕av片| 亚洲成人妻日韩在线| 日韩人妻精品久久久久| 欧美视频一区二区在线| 2017av无码免费无线播| 丝袜 中出 制服 人妻 美腿 中文字幕| 天天夜夜久久| 国产久久久9999| 亚洲AV成人无码一区二区三区在线观看 | 久热网| 操B久久| 激情av| 凹凸视频在线观看伊人| 岛国1区2区3区在线观看| 91性网| 欧美色图亚洲色,麻豆| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 色悠悠伊人网五月天| 鸥美插入视频| 国产又大又粗又长视频在线| 人人喜人人妻| 麻豆国产尤物AV| 综合色色网| 狠狠激情综合狠狠操中文字幕| 五十路六十路素人熟女| 四虎国产精品永久入口| 亚洲AV无码秘 蜜桃臀国精产品| 日本高清视频在线观看黄已三辽| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 乱伦AVxx| aaaa少妇高潮大片| 国产免费一区在线观看| 欧美十八禁在线看| 婷婷AV一区二区三区| 亚洲精品第一| 人人爱操| 中文一区二区婷婷视频| 野狼激情网| 久久久A∨| 大香蕉伊人色偷偷在线| 91女网站| 91强在线播放| 日本天天干天天日一区| 操老熟女AV| 色97欧美| 91啪啪| 欧美一区二区三区不卡高清视频| 亚洲春色欧美激情自拍| 中文字幕精品一区二区精| 熟女人妇一区二区三区| 97色婷| 午夜激情床戏激情| 粉嫩AV一区夜夜嗨| 超碰午夜| 国内伊人久久久久久网站视频| 啊啊啊啊操死我| 亚洲图片欧美色| 欧美精品精品一区二区| 亚洲精品天堂久久A∨51成人漫| 另类一区| 色妺妺在线视频| 欧美亚洲国产自久久| 欧美97日韩精品| 久久9999 | 岛国小电影| 东京热不卡视频| 日日骚av| 欧美 精品国产制服第一页| 欧美黄色大片在线观看 | 丝袜综合| 婷婷激情丁香| 人人干黄色| 日本在线视频导航| 久视频在线观看| AV色五月天| 久久超碰网| 国产强上视频在线观看| 欧美黑人性猛交91| 精品9999| 精品成人无码| 五月丁香影院| 亚洲精品不卡一二三区| 国产精品视频内谢女人| 强奸a片网| 麻豆人妻少妇在线免费观看| 色97干| 亚洲天堂人妻熟妇视频| 大香蕉伊人在线成人AV在线观看| com 首页 18岁 禁区 女优 免费 精选 同城 | 欧美天天| 日本狠狠干| 欧美亚洲激情一二三| 蜜臀久久99精品久久久久| 操B在线观看| 中文字幕丝袜美腿| 欧美亚洲中文| 丁香五月影院| 欧美肥臀在线| 国产 亚洲 丝袜 制服| 北京专精特新企业招聘信息| 欧美亚洲小说| 思思热在线视频精品| 青青草无码视频| 乱伦1色页| 久久色一区| 久九色| 九九亚洲视频| 欧日韩一二三f区| 天天色,天天干,天天干| 日韩人妻丝袜美腿中文| 国产特级毛片AAAAAA高潮流水 | 久久手机好看网站| 97久久国产| 强奸乱亚洲| 屁股久久久久久久久| jk白丝没脱就开始啪啪| 久久久久元码视频| 国产51色综合久久免费| 日韩天天本| 亚洲欧洲综合av在线| 69综合网| 国产精品免费美女视频| 激情综合网一盗摄| 日本操BAV| WWW美腿丝袜香蕉中文| 国产Aα| 九九九九九精品十六| 99在线免费公开视频| 九九热超碰97亚洲最新香蕉| 最新av中文字幕高清| 色爱综合网欧美| 韩国手机不卡无码三级视频| 97超碰免费人人性爱| 97人人操人人摸| 天堂精品一区| 亚洲情色电影网| 国产毛片毛片4p懂色| 白丝少妇一区二区| 国产亚洲禁久一区二区 | 成人八戒网站| 超碰97极品9| 久久久久久久一级黄色打同平台| 日韩熟女操逼| 九七人妻在线| 东京热男人的天堂网| 亚洲国产美女久久久久| 高清不卡 中文 人妻| 国产欧美一区激情交| 亚州男人天堂| 色网综合网| 大香蕉伊人久久| 丰满人妻被猛烈进入中| 中亚黄色三级大片| 天综合中文| 久久东京伊人一本到鬼色| 欧美,日韩,中文,另类| 中文字幕精品人妻丝袜| 久久这里只精品99re66图| 久久九色| 91亚洲欧美综合高清在线| 日韩人妻少妇 一区二区三区| 久操电影| 欧美天天影院| 极品内射| 欧美后进式| 99老司机精品视频在线观看| 久热这里只有精品9| 日日骚 av| 丁香五月激情五月| 377p欧洲日本亚洲大胆| 青青草毛片| av草草在线电影| 欧美亚综合色图| 激情丁香五月| 天天干人妇| 免费久久一级毛片大黄| 天美传媒婬乱在| 呻吟 欧美 日本 中出| 嫩草 人人网精品| 天美精品av| 欧美性爱系列| 欧美精品xxxwww| 被窝影院午夜看片无码| 熟女人妻一区二区三区| 蜜桃天美传媒AV一区二区三区| 天天享受天天看| 久操视频免费在线观看| 操操碰| 男人的天堂一区三区| 色在线综合| 亚洲国产成人精品女人久久久| 久久青娱乐| 黑人干亚洲| 60秒免费小视频| 狠狠搞 亚洲91| 老女人爆菊| 婷婷五月天福利| 99啪啪| 任你爽视频| 搡老熟女老女人老熟妇免费视频| 精品一区二区成人| 乱论91| 可以免费观看的日韩av毛片| 人人操我人人干| 亚洲在线| 影音先锋新男人| av网站国产主播在线| 最新日本中文字幕| 激情黄色片在线观看| 综合久久少妇中文字幕| 国产偷人伦激情在线观看| 久久久久久久9| 丰满人妻区一区二区三| 强奸抽插av| 亚洲欧洲av影音| 亚洲日本激情| 人人操人人搞人人草| 操逼片中文| 强奸a片网| 五月天成人综合| 亚洲性爱高潮影院| 亚洲一区二区三区麻豆传媒| 丰满精品人妻少妇久久字幕| 91丝袜在线视频| 嗯~啊~轻一点 视频| 97资源亚洲| 国产精品点击进入在线影院高清| 丁香九月 婷婷| 家庭乱伦性爱av| 一级免费啪啪片| 蜜臀少妇一区二区| 色婷婷综合久久中文字幕雪峰| 色综合久久夜色精品国产天堂| 久久骚| 上床啊啊啊| 91香蕉国产尤物视频| 亚洲欧洲中文日韩女优乱码| 激情综合网五月婷婷五月天| 久久久人妻| 超碰1024久久| 一卡二卡三卡| 亚洲高清无毛一区二区| 亚洲国产欧美中日韩成人综合视频| 91黑丝露脚| 美日韩在线不卡人妻| 天天日骚逼熟女| 亚洲日韩人妻中文字幕一区| 中文一区在线视频| 91青视频| 色97国产69香蕉| 啊啊啊好想要| 69精品久久久久中文字幕| 欧美午夜精品久久久久久3D| 色网1| 麻豆天美一区二区| 中日韩欧美精品无码AⅤ一区二区| 99久在线精品99re8热| 色五月第四色| 国产精品乱码久久| 久久香蕉国产线看观看猫咪av| 中文字幕在在线观看网站| 亚州精品人妻一二三区| 色在线综合| 五月丁香色综合| AV色五月| 性爱乱伦视频免费| 91人妻人人妻| yazhououmeizongya| 欧美性爱第一区| 九九玖玖精品| 女人综合网| 香蕉婷婷| 久久久久久久久久久精| 亚洲视频1区| 天美国产精品| 欧美大的香蕉有线电视视频| 强奸乱伦麻豆| 五毛骚逼极品美女怕怕| 人人操肉肉| 日韩精品人妻中文字幕有码午| 加勒比aⅴ| 免费综合亚洲中文| 国产97在线播放| 国产黄色 A 片免费看| 东京成人一区| 黑人精品一区二区在线播放| 日韩紧密久久| 日本在线观看网址| 嗯嗯嗯不要不要免费视频| 骚女天天综合网| 色婷婷五月天| 美女啊啊啊啊啊| 精品久久久久久亚洲| 啪啪自拍九九综合| 天天综合网一91网| 97超碰色色| 国产成人资源| 超碰免费人妻人人| 成人综合视频久久| 一级黄色视频网| 好看的久久不射无码影视影院| 人妻啪| 是还免费视频1727我| 人人操人人搞人人草| 欧美伊人久久综合网| 婷婷色一区| 国产毛片片精品天天看视频| 色爱国产| 国产精品白丝AV| 动漫爆乳3D奶水一区在线观看| 五十路人妻在线| 狠狠色婷婷777| 欧洲精品一级二级精品综合视频综合| 另类图片五月| 日本三级A片网站com| 夜草欧美| 欧美日韩第一页| 少妇高潮九九九九| sss视频华人在线| 岛国免费黄色网址| 久久精品国产97欧美精品亚洲 | 日韩AV色图| 日韩在线一区高清在线| 超碰偷拍| 国产性刺激| 欧美一区二区三区入口| 欧美第五页| 九九热精品免费视频| 亚洲一区二区三区不卡国产欧美| 夜夜青青无码影院| 性站 | 亚洲最大的黄色电影网站。| 久久精品国产99精品亚洲蜜...| 狠色婷婷久久一区二区三区_| 亚洲熟女av日韩熟女| 91春色| 91人妻久久久久久久久久久久久| juliaann丝袜大战黑鬼| 18禁网站在线播放| 亚洲国产97| 蜜臀无码一区二区| 97视频网站在线观看| 亚洲精美粉嫩嫩泬在线观看 | 99色悠悠| 久久无码电影| 色色毛片| 97国产精选| 欧美天天谢综合网| av国产无码| 中国少妇XXXX做受| 欧美夜夜| 久久久月天| 色九九九综合| 97久久资源| 99热这里只有精品地址| 亚洲精品国产日韩无码AV永久免| AV色女综合| 亚洲宗合网| 久久超碰亚洲人| 日日夜夜狠狠| 自拍大香蕉乱插| 91午夜无码| 91久久青青草原精品| 久肏视频字幕| 91亚.色| 亚洲精品国产精品乱码不卡| 狠狠操狠狠| 欧亚性爱啪啪| 国产一级不卡在线观看| 香蕉国产精品麻豆亚洲欧美日韩| 欧美色另类| avav青青草久久夜| 美国三级日本三级久久99| 97一区二区三区视频| 顶级少妇BT天堂| 久久久久久久一级黄色打同平台| 亚洲精品日日夜夜52| 国产无马视频| 亚洲 自拍偷拍 欧美| 欧美人人曰人人操人人射射| 国产免费一区2区3区| 色五月av| 玖草在线视频| 久久精品28| 97在线免费视频观看| 丝袜美腿操av| 天天欧美| 婷婷爽人人婷婷爽视频| 色色九区| 国产精品9999| 天久久久噜噜噜久久国产精品爽爽| 久久宗合97| 免费视频观看60秒| 天天久久| 91欧美在线| 日本阿v天堂在线观看| 91bbb| 国产精品爆乳懂色蜜乳| 色综合av综合久久| 大二网站亚洲| 日本成人A片免费看| 久久国产热视频97电影| 亚洲高清无码AAA久久久精品| av天堂5| 97碰在线视频| 日日狠狠久久偷偷色综合免费| 六月婷婷五月丁香| 青青青国产| 国产白丝在线| 好爽要喷了| 少妇精品久久| 久久精品福利影院| 黄页视频网站野外| 天天摸,夜夜摸| 久久久久久91香蕉国产| 久久偷偷色综合蜜桃| 黑人性暴力毛片| 黄色视频高清无码网站| 久久久久久亚洲中文| 色综合久| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 78久久久| 欧美综合色| 日韩欧美亚洲自拍偷拍| 亚洲av淫乱| www.狠狠干.coom| 最新精品久久蜜桃 | 天天做天天爱天天高潮| 爆乳免费黄网站| 18禁久极品美女久久哦哟呀!| 欧美在线大香999| 精品蜜乳AV免费观看| 亚洲av影院在线观看| 亚洲夜色在线| 欧洲亚洲综合| 亚洲图片欧美色图| 秋霞一级视频在线观看免费| 7月婷婷综合| 人妻 欧美亚洲| www久久国产精品| 国产亚洲禁久一区二区| 一区二区三区日韩欧美| 东北老熟女| 涩涩这里只有精品视频| 伊人AAA| av草草在线电影| 精品欧美老熟女一二区| 顶级丝袜熟女一区二区三区| 禁止观看美女黄| 日韩本不卡视频在线观看| 日韩精品一区二区高清| 大香樵伊人网| 青青草原成人| 亚洲国产奇米影视久久| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国产精品青青草| 天美传媒av一区二区| 97天天操| 久操大香蕉| 91国产在线精品| 无码久久亚洲高清,| 五月丁香| 九九九999久久久网站| 中国zzijzzijzzwww精品| www鬼畜国产男人的天堂| 91一区二区三区蜜桃| 国产亚洲综合欧美一区| 中文字幕一区二区三四五区日日骚| 欧美性爱第一页久久| 欧美日韩性感| 丰满人妻-区二区三区免费看| 在线视频日韩欧美国产| 激情婷婷丁香| 欧美日韩性爱无码| 久久精品国产精品| 园内精品自拍视频在线播放| 伊人网在线观看| 欧美一级美片在线观看免费| 亚洲AV乱码专区国产噜噜亚洲| 亚洲全色网| 久久大香蕉手机高清| 亚洲在线91| 久jiu久神马影院| 久久精品国产亚洲AV先锋| 亚洲日产专区| 青春草莓视频在线观看网址| 最新AVzaixian| 午夜精品久久一区二区| 欧美78p| 欧美色综合| 97玖玖人妻| 五月丁香黄色网| 亚洲精品国产精品乱码不卡| 国产91av在线播放| 日欧毛片久久| 丰满人妻一区二区三区大胸懂色 | 精品人妻中文字幕4399| 一区二区三区蜜桃成人撸久久东京热| 男人女人18禁片免费看网站| 亚洲精品欧洲精品| 青青操综合网| 亚洲精品蜜桃久久久| 欧洲色色| 欧美操人视频| 日韩精品操少妇| 午夜偷拍久久熟女| 国产精品久久久亚洲第一牛牛_在线观看 | 超碰亚洲欧美日韩无| 久久久久久99AV无码免费网站| 超碰精品| 国产伦乱91| 女优大全 - 91n| 高清不卡视频| 中文字幕一区电影在线观看| 天天舔日美女视频| 大鸡吧尹人在线| 欧美性爱日韩性爱| 久夜操| 婷婷五月天久久精品视频一区二区三区| 中文字幕日韩专区精品系列| 日本中文字幕一区| 亚洲宅男天堂| 乱伦a片视频| 亚洲精品97久久中文字幕| 日韩女优中文字幕| 国产色精品午夜大片| 亚洲小说视频| 精品人妻一区二区三区夜夜| 久久丁香| www.99中文字幕| 欧美 色 亚洲| 超碰人妻中文在线| 亚洲人成网www| 青青操综合网| 欧美一区二区男人天堂| 98超碰日本| 亭亭丁香激情| 一级免费啪啪片| 国产大陆天天艹| 人妻一区二区三区熟女| 超碰久久精品| 蜜臀在线免费观看在线免费观看| 高清无码国产亚洲| 日本成人A片网站| 超碰九7| 9997se| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 美女上床网站| 熟妇最新先锋一二三区| 91九色首页| 日本免费一级AAA大片器| 久久久96| 三及片网站| 精人妻无码一区二区三区伊人直播 | 东京热熟女亚洲视频网站| 99热在线观看| 久操精品网| 温婉少妇玩3p| 午夜亚洲国产理论秋霞| 人妻夜夜爽天天爽三区麻豆AV网站| 久热99999| 国产精品天干天干综合网麻豆| 91色碰| 天天爽天天操| 中文字幕av亚洲在线| se01国产在线视频| 欧美伊人久久综合网| 欧美十八禁在线看| 亚洲AV无码AV吞精久久久久| 日韩高清黄片| av网站免费线看| 秋霞网无码| 中国熟女老妇仑乱一区二区三区| 中文字幕视频二区| 91白虎| 中文字幕成人乱码熟女精品国50| 久久久一区二区| 亚州色图片在线色| 骚女高跟AV在线| 四虎在线观看网站| 99热大香蕉伊在线| 日日碰视频网| 曰本特级特黄特色黄色A级网站高清在线免费看 | 插插综合网天天影视网| 性色高清..……| 91色伦| 色偷偷综合91久久噜噜| 天天搞欧美| 在线播放中文字幕| 国产在线激情| 久久久久久九| 黄片www视频免费| 日韩日本欧美在线观看| 亚洲中文字幕精品一区| 人人操,人人插| 亚洲无码成人精品| 国模不卡| 日韩性爱小视频在线观看| 无码 有码 国产18p| 高清无码国产亚洲| 一本道综合色图| 偷窥自拍亚洲色图| www.高清无码诱惑一区.com| 精品无码人妻一区二区免费蜜桃| 亚洲偷91色| 麻豆一区二区AV天美| 骚女天天综合网| 欧美性生活男人的天堂| 久操网视频| 狠狠色婷婷7777久| 亚洲国产一区二区三区在线| 久插不卡| 欧美色道啊| 91 偷| 黑人免费福利视频| 亚洲精品一二区| 久久精品国产免费观看99| 天天射影院| 人妻酒店出差被中出免费在线播放| 亚洲精品久久一区二区三区蜜桃臀| 色亚洲欧美| 日韩免费中文字幕视频| 伊人久操| 麻豆视频test| 天天躁狠狠躁av| 91 天天综合| 日韩中文字幕国产| 欧美色五月| 超碰99热中文字幕| 精品人妻一区二区三区四区| 夜草网站| 大香蕉久| yazhousetuoumei| 人人妻人人色一区二区三区| 国产又粗又大硬免费色网视频| 国产AV激情无码久久无码 | 精品十八在线观看| 五十路六十路七十路熟婆| www.色婷婷色综合| 久久水蜜臀亚洲AV无码精品| 91情色在线| 二男一女成人A片| 91AV老熟女视频| 深夜激情| 精品人妻一区二区视频| 亚 欧 美 综合| 91精品久久久久久77777| 久久精品国产亚洲AV先锋| 亚洲成熟国产精品美女| 国产有码一区| 人妻丝袜日本| 成人av动漫在线观看| 欧美熟妇操操视频| 曰韩人妻中文字幕在线| 女人高潮大叫一级毛片| 91色伦综合| 欧美一区二区三区互相| 午夜免费视频1000| 97在线观看视频| 欧日a| 激情人妻另类| 国产真乱mangent| 国产熟女少妇一区| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 国产精品久久久久久久毛片1| 久久超碰亚洲人| 日日爱99| 欧美后进式| 97神马久久| 自拍偷拍2025在线观看| 久草精品一区 | 看看小穴| 91天堂网| www.婷婷六月天| 97久久久久久久久久| 日韩欧美综合激情| 99精品高潮| 国产人妖的免费的视频| 老师充足的奶水小说| 草草电影院| 夜夜夜久久| TS人妖另类精品视频系列| 一本一道人妻久久一区二区三区| 日韩性色| 久操大香蕉手机视频在线看| 97K超碰在线| 99re久久| 不卡视频一区蜜桃视频 | 大屁股熟女一区二区三区| 人人看欧美性爱| 欧美亚州色的图| 玖玖爱免费观看视频| 91狠狠狠| 97在线精品| 无码78| 天美麻豆精品视频99| 97资源久久| 亚洲中文字幕有码视频一区二区三区| 亚洲国产精品无石码久久| 伊色综合天堂色97| 欧美极品美女aaaaaa级黄片| 久久av网| 久久久国产亚洲精品系列| 日韩色图 一区二区| 欧美人人AAA| 午夜爽爽爽| 黑人中出21连凳花野真衣| 中文字幕在线观看永久| 久久人妻少妇| 久久久com| 99久久无码| 青青欧洲黑| 男女一级A片大黄,一进一出| 中文字幕乱码在线观看| 97超久碰| 亚洲精品中文字幕一区在线视频| 99re6在线视频播放免费精品| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 乳欲人妻办公室奶水| 日韩天天综合| 青青草自拍视频在线播放| 黄色片,com| 欧美综合色,www| 亚洲高清视频在线观看| 欧美网站免费| 久久久少妇| 国产精品久久久久久夜夜夜夜| 97色婷婷| 操逼免费视频无码国产| 密臀成人视频久久久| 天天日老熟妇| 啪啪资源网| 97亚洲精品| 少妇高潮喷水无套久久久久久| 亚洲综合色男人网| 日本午夜操逼| TS人妖另类精品视频系列 | 人人插人人摸人人| 99热这里只有精品18| 欧日韩在线观看| 欧美日韩m| 精品性爱一区二区| 中文字幕黄片在线| 国际精品久久久| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 99精品无码| 亚洲精品欧洲精品| 9 9精品一区二区三区| 久操网无码在线| 校园春色综合网| 黄页网站成人免费| 人妻熟女一区二区三区在线| 天天做天天爱| 亚洲午夜福利视频| 中国AV美女| 国产女大学生AV| 色欧美在线| 九九九草| 上床不卡网站| 78综合网| 五月激情视频| 亚洲无码一二三区| 精品高清av中文字幕| 亚洲91色| 亚洲综合嫩| 九一国产精品| 97免费免费视频网| 射丝袜高跟鞋99| 国产丝袜视频| 桃色五月天| 亚洲五月婷婷| 一级免费啪啪片| 亚洲成A∨人影院在线欢看| 久久春色| 南澳成人一级片在线播放| 日本最新免费韩国1区2区视频播放| 五月开心网| 久热久| 精品婷婷| 国产 丝袜 欧美中文 另类| 午夜福利av电影在线| 免费av在线播放二区| 欧美人与动性人交a| 日韩欧美日韩| 2017av无码免费无线播| 热99这里有精品综合久久 | 久久精品人体| 亚洲欧洲偷拍一区| 久久香蕉国产传媒一区剧情天美| 91碰碰| 丁香五月av| 亚洲高潮少妇| 亚洲天堂,男人| 国产女上位好爽在线| 91在线综合网| 激情图片伦理国产一区二区日韩| 性感女人网页在线观看视频| 天堂九九九九九九九九九| 91在线|亚| 不卡九肏| 1024手机看片欧美日韩| 亚洲综合骚逼| 东京热99999| 97操碰| 亚洲天天综合|