精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C編程鬼話:完善MVC的DEMO,閑話MAKEFILE

開發 開發工具 后端
變量是個好東西,你可以和C語言中的#define近似理解。不過還是有些區別,在展開的時候。同時特別諸如CC,CFLAG這些變量,屬于隱含的變量。下面將詳細的說明了如何完善MVC的DEMO等等……

不得不說一句,從開始,到現在,我不得不忍受著無法使用make MAKEFILE的折磨。而如果從開始到現在,所有的例子你都親自敲過諸如如下的命令:

  1. gcc -Wall attr.c value.c view.c control.c model.c -o attr 

你或許會對C語言編程喪失信心。你甚至可能會出現一個代碼編譯的錯誤。當你敲入

  1. gcc -Wall attr.c value.c view.c model.c -o attr 

鏈接會有問題。這些手工的小失誤,帶來的都是麻煩事。還有更麻煩的。如果我們有100個C文件整合起來的工程。不算多,真的。如果改動一個文件,也按照上面的方式及執行,就會很慢。特別是debug的時候,思路往往在你上次廁所后就容易斷掉。嘗試幾種測試方法,迅速觀測結果,對于某些類型的測試是需要的。而debug也經常需要反復的修改和編譯鏈接。

一種好的做法,是我們先編譯,把對象文件保存,當出現某個具體文件修改后,可以只對這個文件進行編譯,而其他文件沒必要處理,然后由此對此次以及上次生成的沒有改變對應源碼的對象文件一起鏈接。編譯相對鏈接,是個比較慢的工作。由此在你只改動control.c前后你可以如下操作。

沒改動control.c前,我們可以

  1. gcc -Wall -c attr.c value.c view.c control.c model.c 

以上由于有了-c所以是多所有的C文件進行編譯,生成同名的,后綴為.o的對象文件。

  1. gcc attr.o value.o view.o control.o model.o -o attr 

這是將所有的對象文件作為資源,鏈接生成一個attr的執行文件。

僅改動了control.c,那么我們可以

  1. gcc -Wall -c control.c  
  2.  
  3. gcc attr.o value.o view.o control.o model.o -o attr  

但這樣也帶來個問題。很多情況下,經常出現你實際改動的文件,并沒有被編譯,而原先的.o文件也存在。上述工作都不會報錯,而且你的改動并沒有被執行程序所體現。通常的情況,你會徹底崩潰,為什么左改右改,就是沒變化。

這里提到一個新的參考文獻 6. <gun make 中文手冊> 徐海兵 譯。 我不認識他,哈。不過難得我推薦一本中文書籍。理由如下:

1、這書即便有人認為翻譯的爛,但多少對你學習make足以,沒覺得有什么翻譯不足導致影響原理,概念理解的地方。

2、make 更是個工具。主要是拿來用的。除非整天折騰makefile的人,相信我,通常你每3個月,才組織設計一次makefile,那么原理和概念的東西,還是會有失憶性遺漏,快速用起來這是關鍵。這和C標準資料還不一樣。后者。原理理解的一些偏差,可能導致代碼涉及的很大改動。

推薦gun make 中文手冊 。但不會如同其他參考文獻一樣,給出章節出處,做詳細闡述,是希望你該養成,自己通讀資料的習慣,而不是別人告訴你,具體哪頁,哪行的保姆時學習。 因此,我不會給出任何參考文獻 6的引用,當然絕對不是對徐海兵的冒犯及不信任。

鬼話:如果你說你會寫C程序,而不會用make,拜托,千萬別出去拿C的招牌說事了。丟人,而且丟大了。

這里先說說make的精髓。我認為有以下幾個方面。

1、文件敏感性。也即,當make工作,會對文件是否修改很敏感。于是,你可以丟給他一堆文件,當這些文件被更新時,它是可以根據規則,進行有選擇的處理。

2、依賴,這種依賴,你可以理解成因果關系。甚至可以理解成觸發事件的響應。這可比一般的腳本要爽太多。

3、規則。這是編程序的一個境界。突出強調規則,如同數學突出強調邏輯關系,而不是強調具體數值一樣。

4、腳本化。靈活的組織邏輯,而不是呆板的一行行的解釋執行規則。

鬼話:為什么說make是這么好的東西。如果你認為某個應用程序或者linux的創始人算大牛,確實是大牛,那么make可以說是一堆歷史上的大牛,在經歷過痛苦后,努力創造出來的東西。任何贊美之詞,如果你用在其他應用軟件或工具上,make都值得同等對待。C語言,除了自身在代碼性能,底層開發上可以超越其他高級語言外,原生的make操作,也足以讓一個C程序員,藐視其他夸夸其談某個IDE多么人性化的程序員,因為大多數你看到的IDE,后臺都藏著make,make不單單為C語言服務,無非C程序員當然也包括C++程序員經常直接面向make。不是我在激起語言和程序員的類別之爭。make 的設計,思想,對比現在很多什么架構,框架,要高明的多。雖然你看它是非常簡單和樸素的。相信我,make的熟練使用后,你一定會有對C語言設計脫胎換骨的感覺,無論你在那個操作系統下。當然make這不是本書的重點,具體的學習,需要系統的看對應的資料,包括上面推薦的那本,此處僅介紹如何簡單的應用,以降低我們現有C語言設計中的開發負擔。

先說說make的操作。通常就是個簡單的

  1. make 

命令。make程序,會自動查找配置文件。也是傳說中的makefile,這算慣例,或潛規則?;蛘吣憧梢?/p>

  1. make -f filename 

filename 是一個任意文件。

但不是潛規則要求的文件名。這樣做通常用于臨時性的make使用,正式情況,不需要如此折騰。潛規則有個好處,你被潛規則了,其他人也會被潛規則。這樣降低你和其他人的交流成本。

由此,另一個做法是將你的計劃,寫在名為 GNUmakefile ,makefile ,Makefile這幾種文件名中任意一個。恩。make的潛規則文件名也有幾種寫法。但潛規則中的潛規則是,我們都用Makefile。如果老師考你 make的潛規則,都可以識別哪幾個文件名,他們的依次順序時,你可以毫不猶豫的向他豎中指。他如果問哪學的,你可以說是野鬼教的,因為他沒有說是那個版 本的make。不過豎歸豎,為了防止意外,你還是要知道,GNU make是按照GNUmakefile ,makefile ,Makefile依次進行查找的,同時盡可能的確保你的目錄下只有Makefile一個文件。

需要特別說明的是,GNUmakefile人如其名,只有GNU make可以識別,make也有不同的版本和來源和C的編譯器一樣,只不過linux上用GNU make的還是比較多。但仍然建議使用 Makefile這個文件名。

有了潛規則,你就不需要如此寫

  1. $make Makefile 

直接 make會查找。那么我們先做第一個例子。你將下面的內容,保存為Makefile這個文件在./attr這個目錄下

  1. what:  
  2.  
  3. gcc -Wall -c ./attr.c ./control.c ./view.c ./value.c ./model.c  
  4.  
  5. gcc ./attr.o ./control.o ./view.o ./value.o ./model.o -o attr  
  6.  
  7. heihei:  
  8.  
  9. rm *.o  

注意兩個書寫問題

1、what需要頂頭寫,表示一個操作的開始,用此來直接區分不同操作的描述范圍

2、gcc等實際操作的內容前面需要空一個tab。

鬼話:“操作”只是我的口頭語,官方的說法叫“規則的目標”,我只是希望新手理解實際就是一個操作,而且操作里面可以有很多命令 依次組成依次執行,而且make一次只會對一個操作進行操作,除非其他操作和這個操作有依賴關系。但操作通常都是有操作的結果(輸出的文件),所以叫規則 的目標

鬼話:“頂頭寫”除了描述“規則的目標”外,還有很多其他頂頭寫的事情,因此,不單單要頂頭寫,你還需要加上個‘:’,這樣,make就可以知道,頂頭寫,同時存在一個‘:’則是一個操作的開始,也就是“規則的目標”。

鬼話:關于"what",我實在想不出什么名詞,能說明“規則的目標”有什么特殊的命名方式。用what是希望大家理解,規則的目標的名字,并沒有什么特殊約束,你愛怎么寫怎么寫,但存在一些潛規則和make的規矩會讓你吃苦頭,只是我在邊上 “what,寫這個例子時,我確實在what,heihei"。比如通常,heihei應該用 clean來實現。同時,你執行如下命令

  1. make  
  2.  
  3. make what  
  4.  
  5. make clean  

你會發現,make沒有后面的參數時,執行了what。不是因為what的單詞字幕更少。而是因為what是第一個規則。因此,通常你需要將最常用的,當然 未 必是build操作,放在第一個。這樣可以簡化你的操作。直接make就可以。但這個最常用的,與你和你的開發小組第一直覺希望make做什么有關系。通常程 序員之間會說“這樣這樣后,make一下”而不會解釋make what。

你問“make what?"

同事說:“對就是make what!"

"make what what 啊?”

“就是make what 啊,你what 什么 what ???”

這說明兩個問題,第一,make的第一個規則,盡可能是你們小組的共識常用工作,第二,命名很重要。你和你的同伙"what"來“what"去,最多相互 懷疑智商問題。但如果你起名叫“love",然后和你的女同事說,記得make love一下。當心她告你性騷擾。

現在你已經發現make 針對Makefile有第一個好處了。就是批處理化。算是腳本的一種功能體現吧。不過你反復的執行

  1. make what 

系統會機械呆板的毫無保留的進行執行。如果我們只想執行那些被改變的呢?你可以嘗試如下方式:

  1. what: ./control.c  
  2.  
  3. gcc -Wall -c ./attr.c ./control.c ./view.c ./value.c ./model.c  
  4.  
  5. gcc ./attr.o ./control.o ./view.o ./value.o ./model.o -o attr  

保存,我們再執行兩邊make?;蛘適ake what。

現在回到haha上。繼續make haha ,兩邊,恩,你會發現和前面一樣。沒錯。我們再換一下

  1. ./control.o:./control.c  
  2.  
  3. gcc -Wall -c ./attr.c ./control.c ./view.c ./value.c ./model.c  
  4.  
  5. gcc ./attr.o ./control.o ./view.o ./value.o ./model.o -o attr  
  6.  
  7. clean:  
  8.  
  9. rm *.o  

我們再make,此時make會提示,./contorl.o是最新的了。沒有必要處理。這是因為make會根據目標,./control.o的依賴,./control.c來判斷,是否需要對目標進行重新處理。如果依賴沒有被更新過,那么目標對應的處理,就是下面的兩個gcc命令,則不會進行。這樣好處是顯而易見的。你對應的C文件沒有更新,何必處理呢?

你此時,將control.c的第一行,加次回車,意思是讓文件多個空白行。保存,再

  1. make 

此時,gcc又被運行了。怎么樣?讓make幫你查找當前那些文件被改動了,很方便,很貼心吧。不過此時又有個問題,你嘗試將model.c同樣加上一個空白行,保存,再

  1. make 

結果提示,已是最新文件。沒辦法,確實如此啊,你的依賴規則只提到了control.c,而你的目標是./control.o,無非目標下的執行,你做了很多.o的生成,和最終attr執行程序的鏈接。同樣的錯誤會發生在你修改control.h。make會查找依賴的文件的更新情況。但是不會啟動C的預編譯系統來判斷,其所#include的文件是否更新。

你可以嘗試

  1. make  
  2.  
  3. make clean  
  4.  
  5. make  

此時,clean會刪除掉所有的.o文件,所以第二次make又再次運行。因此make除了看依賴是否改變,還會看目標是否存在。由此引發一個問題。你嘗試

  1. make  
  2.  
  3. rm attr  
  4.  
  5. make  

怎么樣?第二次make不工作了。因為./control.o確實存在啊。即便./attr被刪除了。但和目標生成的依賴沒有關系。和目標也沒關系。雖然你的批處理的最終目標是./attr。但是make 的默認操作是看./control.o由此你需要注意,考慮一個現實,最終編譯鏈接,是做什么事情?通常我們將編譯鏈接的工作稱為build。區別于強制工作 rebuild,即便所有的文件沒有被更新,也將所有的文件進行重新操作。由此我們可以如下寫:

  1. control.o:./control.c ./control.h  
  2.  
  3. gcc -Wall -c ./control.c  
  4.  
  5. ./value.o:./value.c ./value.h  
  6.  
  7. gcc -Wall -c ./model.c  
  8.  
  9. ./model.o:./model.c ./value.h  
  10.  
  11. gcc -Wall -c ./model.c  
  12.  
  13. ./view.o:./view.c ./value.h  
  14.  
  15. gcc -Wall -c ./view.c  
  16.  
  17. ./attr.o:./attr.c ./value.h  
  18.  
  19. gcc -Wall -c ./attr.c  
  20.  
  21. build:./control.o ./value.o ./model.o ./view.o ./attr.o  
  22.  
  23. gcc ./attr.o ./control.o ./view.o ./value.o ./model.o -o attr  
  24.  
  25. rebuild:  
  26.  
  27. clean  
  28.  
  29. build  
  30.  
  31. clean:  
  32.  
  33. rm *.o  

我們運行一下

  1. make clean  
  2.  
  3. make  

哦,第一次單獨的make會出來一個

  1. gcc -Wall -c ./control.c  
  2.  
  3. make build  

哦。有一堆 gcc -Wall,還有一個錯誤,提示,沒有value.o這個文件。導致無法鏈接。還是那句

鬼話:我盡可能教錯的,這樣你才知道,對的有什么價值。與其挨老師的板子說你不努力死記硬背,不如到我野鬼的坑里摔一摔,鍛煉個強健筋骨。

如果你再運行make rebuild

會提示,找不到clean

如果你再次運行

  1. make build 

則仍然會繼續執行,不在乎是否.o存在,C文件是否被更新。

即便你更新 define_attr.h,對于model.o仍然無動于衷。你忘了在./model.o的依賴中增加這個文件了嘛。

上面這個情況說明了幾個問題:

1、make 仍然是針對第一個規則目標進行默認處理。

2、make build 依次檢測.o文件這些目標,并根據.o文件啟動對應的目標的執行。

3、你會發現,./value.o:的實際執行書寫不當,導致沒有去完成./value.o的生成,而是做了model.o的工作。

4、clean我確實寫了,為什么找不到?

5、很多依賴好煩人,難道我們需要根據C代碼一個個找頭文件?你忘了在./model.o的依賴中增加這個文件了嘛。

6、make build總在執行。正常,build看成了一個目標。而這個目標并不是文件,則make始終認為這個目標需要執行。

針對第一個問題,如果你反復debug時,需要盡可能的將所有的編譯,并鏈接,那么build是需要作為默認規則。因此我們需要把build調整到第一個位置。

第二第三個問題是,該死的規則依賴的書寫方式,還是麻煩和容易書寫出錯。我們可以使用通配符和自動化變量來設計一個通用處理方法。如下

  1. %.o:%.c  
  2.  
  3. gcc -Wall -c $< $@  

%表示一個通配符。這只能正對 x.o ,而不會針對x.p.o等情況。

  1. %.o:%.c 

表示,任意文件名,后綴為.c的,為依賴,對應的目標文件是同名的文件名,后綴為.o,我們使用同樣一個規則。

$< 表示規則的依賴,$@表示規則的目標。其實你更本不需要寫這個內容,make也隱藏了這個默認規則。無非默認的情況并沒有沒用-Wall

 

第四個問題是,為什么rebuild的操作找不到clean。很簡單,clean是個操作規則,你可以理解成一個函數調用另一個函數,而不是具體的執行語句,當然切記clean并不是個函數,因此你應當把clean作為一個依賴放到rebuild 之后,而不是作為操作。clean不是磁盤文件,此時make 在磁盤上尋找clean自然找不到。這還只是個故事,如果想讓故事增加點懸疑,你可以讓磁盤上真有個叫clean的文件。這種情況下,如果僅是個操作,而不是文件,那么你需要用.PHONY來說明一下。

第5個問題,我們可以借助gcc的一個工作, -MM,其目的是,對C文件進行分析,列出其依賴的頭文件是什么。你可以執行如下命令

  1. gcc -M model.c  
  2.  
  3. gcc -MM model.c  

看一下 ,上述兩個參數的差異。為了省省屏幕,通常還是-MM吧,他可以忽略默認的頭文件位置,也即那些 <>內的頭文件。除非你需要檢查<>內的頭文件是否路徑引用正確。否則 -MM是首選。此時gcc給自動給你打印出依賴,只不過在屏幕上。你完全可以將其輸出在一個文件里。如下:

  1. gcc -MM model.c > model.d 

我們可以在Makefile 里 增加

  1. sinclude model.d 

這基本等同于C語言里的#include。將model.d的內容增加到當前Makefile中進行分析,執行。

第6個問題,一個簡單的方法如下,我們可以讓build的依賴是最終的執行文件。而最終的執行文件作為一個目標,其依賴各種.o如下

  1. build: attr  
  2.  
  3. attr:./control.o ./value.o ./model.o ./view.o ./attr.o  

因此我們的Makefile可以如下設計

  1. build:attr  
  2.  
  3. attr:%.o  
  4.  
  5. gcc ./attr.o ./control.o ./view.o ./value.o ./model.o -o attr  
  6.  
  7. rebuild:  
  8.  
  9. clean  
  10.  
  11. build  
  12.  
  13. clean:  
  14.  
  15. rm *.o *.d  
  16.  
  17. include view.d model.d value.d attr.d control.d  
  18.  
  19. %.o :%.c %d  
  20.  
  21. gcc -Wall -c $< -o $@  
  22.  
  23. .PHONY: rebuild clean build 

不過這樣還是麻煩,因為你需要手工把所有的.d文件進行生成才能使用,而且你會發現源代碼的文件名被使用了很多地方,無非是后綴有.d,有.o,雖然我們使用%.o做了個通配符的.o依賴,讓所有當前能找到.o都加入進來,但仍然是麻煩。一個簡單清爽的做法如下:

  1. CFLAG := -Wall -c  
  2. CC := gcc  
  3. sources = model.c view.c attr.c control.c value.c  
  4. build:attr  
  5. %.o :%.c  
  6.     $(CC) $(CFLAG) $< -o $@  
  7. %.d: %.c  
  8.     $(CC) -MM  $< > $@.$$$$; \  
  9.     sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \  
  10.     rm -f $@.$$$$  
  11. sinclude $(sources:.c=.d)  
  12.  
  13. attr:$(sources:.c=.o)  
  14.     gcc $^ -o $@  
  15.       
  16. clean:  
  17.     -rm  %.o %.d  
  18. rebuild:clean build  
  19.           
  20. .PHONY:rebuild clean build  

注意幾個問題

$< ,$@,$^詳細信息,你需要參考文獻 6,他們是自動化變量。

%,和*的差異,也需要仔細閱讀參考文獻 6 。

sinclude 可以引入一批文件。

rm之前多了個 -,意思是如果這是個錯誤執行,則忽略,而不是make中斷。你覺得沒用?那你將 -rm %.o刪除掉。然后嘗試執行以下命令

  1. make clean  
  2.  
  3. make rebuild  

沒有.o文件,好事啊,難道就不能繼續build嗎?make對實際的執行命令,如果出錯就停止了。還是安心加上 -吧,如果有些執行不在乎其是否正常,rm是典型的例子。

%d:%c后面執行的是什么意思?你在參考文獻6中同樣可以找到。這里還引入了變量的概念。

鬼話:變量是個好東西,你可以和C語言中的#define近似理解。不過還是有些區別,在展開的時候。同時特別諸如CC,CFLAG這些變量,屬于隱含的變量。本身系統會有一定默認的含義,上面這樣的做法,是重新書寫定義,不要亂表示其他內容。多看看書是有好處的。

針對上面的內容,基本上你可以直接根據C文件的列表,也即你修改sources的后續內容進行自動化編譯了。包括依賴的自動生成。當然你完全可以如下操作,畢竟gcc -MM的內容,通常不重要,看這也眼花。

  1. %.d: %.c  
  2.  
  3. @set -e; rm -f $@;\  
  4.  
  5. $(CC) -MM $(CFLAGS) $< > $@.$$$$;\  
  6.  
  7. sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@;\  
  8.  
  9. rm -f $@.$$$$ 

鬼話:上面這些內容該怎么解釋。我說了。多半你也忘,不如你自己查資料。與其google一下,不如找到shell的相關書籍尋找答案。我希望從告訴你什么資料,多少頁多少行,最初級階段開始,到我告訴你這本書,你自己找,到你自己去尋找一本書,找到相關內容,這么延伸的提升你自主查找資料的能力。別抱怨我懶,我勤快了,你就懶。我懶,你就有機會勤快了。

原文鏈接:http://www.oschina.net/question/249672_79322

責任編輯:林師授 來源: OSCHINA
相關推薦

2013-10-22 15:31:52

CIO

2010-03-16 16:41:24

Java編程語言

2010-03-12 16:15:06

Python調試

2009-02-02 09:08:38

MVC框架控制器CakePHP

2010-02-06 11:13:11

C++ makefil

2010-05-10 13:37:15

2011-07-22 15:50:06

Cocoa MVC 視圖

2015-05-22 09:49:25

2015-08-25 10:40:22

運維標準化

2010-01-11 10:28:51

C++編程

2009-10-23 16:43:34

APC

2017-03-27 16:02:06

安全主管信息安全

2010-03-19 09:39:17

Python編程語言

2022-10-13 15:51:29

C++應用開發

2011-05-30 15:29:32

C++

2009-08-12 14:01:17

C# Excel編程技

2014-04-09 10:18:21

ASP.NETMVC

2009-11-13 14:39:48

iMC APM管理組件H3C

2010-05-28 14:55:17

Linux編程工具

2012-09-24 15:13:50

C#網絡協議TCP
點贊
收藏

51CTO技術棧公眾號

日韩视频在线免费播放| 91精品久久久久| 波多野结衣一本| 欧美色片在线观看| 亚洲精品一二三四区| 精品国产一二| 97超碰人人草| 一区二区三区导航| 日韩最新在线视频| 97香蕉碰碰人妻国产欧美 | 一区二区三区日本久久久| 精品视频1区2区| 国产免费黄色一级片| av午夜在线| heyzo一本久久综合| 国产日韩欧美自拍| 亚洲精品午夜国产va久久成人| 日本一二区不卡| 亚洲第一黄色网| 中文字幕22页| 三级成人黄色影院| 亚洲福利国产精品| 91xxx视频| 国产精品影院在线| www.日本不卡| 99国产超薄丝袜足j在线观看 | 欧美日韩亚洲一区二区三区在线观看 | 成人激情综合网| 亚洲欧美日韩激情| 亚洲国产免费| 欧美理论电影在线观看| 老司机福利在线观看| 亚洲香蕉视频| 精品成人一区二区三区四区| 日韩av一卡二卡三卡| 人人鲁人人莫人人爱精品| 亚洲综合另类小说| 香蕉视频在线网址| 日韩毛片久久久| 国产三级精品在线| 欧美1o一11sex性hdhd| 欧美一级淫片免费视频魅影视频| 久久99精品国产麻豆婷婷| 国产成人精品综合| 69视频免费在线观看| 日韩亚洲国产精品| 久久久久久久91| 精品无码m3u8在线观看| 欧美精品国产一区| 美女啪啪无遮挡免费久久网站| 国产视频123区| 日本一二区不卡| 最近2019年好看中文字幕视频 | 欧美自拍第一页| 国产a区久久久| 国产成人精品福利一区二区三区| 亚洲国产中文字幕在线| 岛国一区二区在线观看| 亚洲自拍偷拍视频| 午夜精品久久久久久久99 | av色综合网| 黄色av网站免费在线观看| 成人高清伦理免费影院在线观看| 国产精品区一区二区三含羞草| 亚洲精品国产一区二| 北条麻妃国产九九精品视频| 国产欧美日韩在线播放| 亚州男人的天堂| 久久婷婷国产综合精品青草| 欧美精品人人做人人爱视频| av在线电影播放| 亚洲日本中文字幕区| www.夜夜爱| 成人小电影网站| 欧美日韩你懂的| 国产chinesehd精品露脸| 国产亚洲精品美女久久| 亚洲视频在线看| 国产美女高潮视频| 欧美日韩爆操| 2023亚洲男人天堂| 亚洲在线免费观看视频| 国产麻豆视频一区| 精品麻豆av| melody高清在线观看| 亚洲免费av高清| 亚洲人精品午夜射精日韩| 欧美日韩美女| 欧美一区二区在线不卡| 国产亚洲色婷婷久久99精品91| 欧美人妖在线| 欧美大奶子在线| 亚洲 欧美 日韩 综合| 蜜桃久久久久久久| 99精彩视频在线观看免费| 日韩一区av| 亚洲欧美日韩人成在线播放| 东北少妇不带套对白| 免费高清视频在线一区| 日韩美一区二区三区| 法国空姐电影在线观看| 欧美成人中文| 国产成人精品综合| 亚洲乱码国产乱码精品精软件| 国产亚洲制服色| 中文精品无码中文字幕无码专区| 日韩电影大全网站| 精品国产伦一区二区三区观看体验| 国产熟女一区二区| 一区二区日本视频| 99精品国产高清一区二区| av网站大全在线观看| 午夜影院在线观看欧美| 亚洲欧美天堂在线| 欧美极品在线观看| 久久久久久久久久国产| 亚洲无码精品在线播放| 26uuu亚洲| 菠萝蜜视频在线观看入口| 国产精品伦一区二区| 亚洲免费高清视频| 日韩 欧美 亚洲| 黑人巨大精品欧美一区| 日韩中文字幕一区| 天堂а√在线最新版中文在线| 日韩亚洲欧美在线观看| 我要看一级黄色录像| 日韩电影在线免费看| 久久久99爱| 极品av在线| 日韩三区在线观看| 大地资源高清在线视频观看| 奇米四色…亚洲| 欧洲精品码一区二区三区免费看| 9999在线视频| 精品国精品国产尤物美女| 免费国产羞羞网站美图| 久久精品久久99精品久久| 日本日本精品二区免费| 二区三区不卡| 精品爽片免费看久久| 日本一区二区欧美| www.欧美精品一二区| 日韩国产一级片| 国产精品99久久免费观看| 久久99热精品这里久久精品| 国产高清视频免费| 亚洲精品精品亚洲| 日本黄色www| 欧美日本在线| 国产日韩欧美亚洲一区| 91福利在线尤物| 亚洲精品aⅴ中文字幕乱码| 久久午夜无码鲁丝片| 成人av手机在线观看| 国产精品国产亚洲精品看不卡| 久久久久高潮毛片免费全部播放| 97国产精品久久| 日韩三级电影网| 91国模大尺度私拍在线视频 | 亚洲伦在线观看| 超碰人人cao| 欧美精品99| 精品日本一区二区三区在线观看| 欧美日韩国产观看视频| 国产亚洲精品久久久| 一卡二卡三卡在线观看| 亚洲精选一二三| 中文字幕在线视频播放| 老鸭窝91久久精品色噜噜导演| 欧美一区二区福利| 欧美91在线|欧美| 成年无码av片在线| 日本黄色免费视频| 欧美性猛xxx| 老司机福利在线观看| 国产传媒欧美日韩成人| 高清在线观看免费| 日韩欧美高清| 99精品国产高清在线观看| 麻豆免费版在线观看| 国产亚洲精品综合一区91| 国产精品视频一区二区三区,| 一区av在线播放| 欧洲女同同性吃奶| 久久91精品久久久久久秒播| 全黄性性激高免费视频| 加勒比久久综合| 99在线免费观看视频| 88xx成人永久免费观看| 欧美黑人xxxⅹ高潮交| 欧美拍拍视频| 日韩西西人体444www| 无码人妻一区二区三区线| 日韩一区中文字幕| 午夜理伦三级做爰电影| 国产精品一区二区果冻传媒| 六月丁香婷婷激情| 欧美日韩1区| 一本久久a久久精品vr综合| 成人精品毛片| 国产精品视频内| 国产美女高潮在线| 久久五月情影视| 美女毛片在线看| 欧美成人a在线| 夜夜狠狠擅视频| 黑人巨大精品欧美一区免费视频| 搜索黄色一级片| 国产人成亚洲第一网站在线播放| 香蕉视频免费网站| 狠狠网亚洲精品| 久久午夜夜伦鲁鲁一区二区| 在线国产日韩| 91看片淫黄大片91| 日韩国产一区二区三区| 欧美激情论坛| 女一区二区三区| av蓝导航精品导航| 国产美女亚洲精品7777| 日韩免费av一区二区| 999av小视频在线| 九九热这里只有精品免费看| 3d成人动漫在线| 国产亚洲精品综合一区91| 深夜福利在线观看直播| 欧美sm美女调教| 国产欧美日韩成人| 欧美日韩视频在线一区二区| 久久精品五月天| 欧美日韩色婷婷| 日本少妇毛茸茸高潮| 夜夜嗨av一区二区三区网页| 国产高清视频免费在线观看| 亚洲国产精品成人综合| 亚洲第一成人网站| 久久久99久久| 人妻少妇无码精品视频区| 久久综合九色综合97婷婷女人| 特级特黄刘亦菲aaa级| 国产精品系列在线播放| 麻豆精品国产传媒| 高清成人免费视频| 少妇一级淫片免费放播放| 成人国产精品免费观看动漫| 国产激情第一页| 99国产精品久久久久久久久久久| 人妻换人妻a片爽麻豆| 99视频精品在线| 少妇饥渴放荡91麻豆| 91色.com| 久久中文字幕精品| 国产精品国产三级国产普通话蜜臀| 亚洲一级理论片| 最新国产成人在线观看| 国产午夜精品理论片| 亚洲乱码国产乱码精品精可以看| 免费在线观看一级片| 亚洲一区二区五区| 日韩美女黄色片| 色综合天天综合色综合av| 国产性生活视频| 欧美日韩亚洲综合在线| 精品久久在线观看| 亚洲国产黄色片| 美国成人毛片| 日韩在线视频观看正片免费网站| 黄色网址免费在线观看| 欧美黄色性视频| 亚洲永久av| 国产原创欧美精品| 超碰在线一区| 欧美日韩亚洲一区二区三区在线观看| 色琪琪久久se色| 免费看日b视频| 午夜在线一区| 免费精品99久久国产综合精品应用| 国产激情一区二区三区| 中文字幕在线免费看线人| 欧美国产精品一区二区三区| 欧美黑人性猛交xxx| 精品国产31久久久久久| 中国a一片一级一片| 日韩欧美综合一区| 色吊丝在线永久观看最新版本| 亚洲图片欧美日产| 天天干在线视频论坛| 国产精品v片在线观看不卡| 深夜激情久久| 日韩在线第一区| 中文字幕一区二区三区久久网站 | 蜜桃麻豆av在线| 国产免费一区二区三区在线能观看| 日韩视频一二区| 日韩高清在线播放| 国内自拍一区| 欧美成年人视频在线观看| 成人av手机在线观看| 99成人在线观看| 色综合久久久久久久久久久| 国产女人18毛片水真多| 亚洲欧美制服综合另类| 欧洲成人综合网| 国产欧美精品在线| 西瓜成人精品人成网站| 欧美一级中文字幕| 日本中文一区二区三区| 第四色在线视频| 亚洲欧美日韩电影| 一级片中文字幕| 日韩欧美第一区| 国内外激情在线| 国产精品视频导航| 国产麻豆精品久久| 国产主播自拍av| 国产成人精品亚洲日本在线桃色 | 91精品视频网站| 精品国产91| 男人天堂999| 成人h动漫精品| 免费中文字幕视频| 91麻豆精品国产91久久久| 成人高清在线| 欧美最顶级的aⅴ艳星| 国产96在线亚洲| 欧美中日韩在线| 国产精品综合在线视频| 国产精品国产三级国产传播| 欧美天天综合网| 搞黄视频免费在线观看| 日产精品99久久久久久| 久久九九热re6这里有精品| 日韩人妻无码精品久久久不卡| 国产福利一区二区三区视频| 日本高清不卡免费| 6080午夜不卡| 综合久久2019| 成人动漫视频在线观看免费| 中文字幕一区二区三区久久网站 | 日本亚州欧洲精品不卡| 日韩不卡一二区| 国产乱色国产精品免费视频| 日韩女优一区二区| 精品日韩99亚洲| 97人人在线视频| 乱一区二区三区在线播放| 嫩草成人www欧美| av中文字幕免费观看| 色婷婷综合久色| yw193.com尤物在线| 国产精品日韩在线| 99国产精品一区二区| 在线观看中文av| 亚洲国产综合色| 飘雪影视在线观看免费观看 | 欧美一区二区在线不卡| 国产亚洲欧美精品久久久www| 精品福利视频一区二区三区| 123区在线| 牛人盗摄一区二区三区视频| 日韩精品久久理论片| 影音先锋男人看片资源| 91精品欧美福利在线观看| 欧美xxxx做受欧美88bbw| 狠狠干一区二区| 三级欧美韩日大片在线看| 国产精品suv一区二区88| 欧美一区二区三区在线观看 | 庆余年2免费日韩剧观看大牛| 国产影视一区| 女人高潮一级片| 亚洲成av人影院| 黄色大片在线免费观看| 国产一区香蕉久久| 在线不卡亚洲| 精品夜夜澡人妻无码av| 欧美日韩国产a| 91在线三级| 亚洲电影一二三区| 国产福利一区二区三区视频在线| 日本午夜视频在线观看| 日韩中文字幕久久| 波多野结衣欧美| 天天操天天爽天天射| 亚洲精品网站在线观看| 免费观看成年在线视频网站| 国产在线98福利播放视频| 99热这里只有成人精品国产| 日本二区三区视频| 亚洲欧美第一页| 免费精品一区| 超碰网在线观看| 亚洲一区二区三区四区在线免费观看| 男女av在线| 国产69精品久久久久9999apgf| 天堂影院一区二区| 久久久久久久极品内射| 最近2019年手机中文字幕| 欧美三级午夜理伦三级小说| 亚洲18在线看污www麻豆 |