青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0
在 Unix 上寫程序的人大概都碰過 Makefile,尤其是用 C 來開發程序的 
   
    人。用 make 來開發和編譯程序的確很方便,可是要寫出一個 Makefile 
   
    就不簡單了。偏偏介紹 Makefile 的文件不多,GNU Make 那份印出來要幾 
   
    百頁的文件,光看完 Overview 就快陣亡了,難怪許多人聞 Unix 色變。 
   
    本文將介紹如何利用 GNU Autoconf 及 Automake 這兩套軟體來協助我們 
   
    『自動』產生 Makefile 檔,并且讓開發出來的軟體可以像 Apache, 
   
    MySQL 和常見的 GNU 軟體一樣,只要會 ``./configure'', ``make'', 
   
    ``make install'' 就可以把程序安裝到系統中。如果您有心開發 Open 
   
    Source 的軟體,或只是想在 Unix 系統下寫寫程序。希望這份介紹文件能 
   
    幫助您輕松地進入 Unix Programming 的殿堂。  
 
   
    1. 簡介  
 
   
    Makefile 基本上就是『目標』(target), 『關連』(dependencies) 和 
   
    『動作』三者所組成的一連串規則。而 make 就會根據 Makefile 的規則 
   
    來決定如何編譯 (compile) 和連結 (link) 程序。實際上,make 可做的 
   
    不只是編譯和連結程序,例如 FreeBSD 的 port collection 中, 
   
    Makefile 還可以做到自動下載原始程序套件,解壓縮 (extract) ,修補 
   
    (patch),設定,然後編譯,安裝至系統中。  
 
   
    Makefile 基本構造雖然簡單,但是妥善運用這些規則就也可以變出許多不 
   
    同的花招。卻也因此,許多剛開始學習寫 Makefile 時會感到沒有規范可 
   
    循,每個人寫出來的 Makefile 長得都不太一樣,不知道從何下手,而且 
   
    常常會受限於自己的開發環境,只要環境變數不同或路徑改一下,可能 
   
    Makefile 就得跟著修改。雖然有 GNU Makefile Conventions (GNU 
   
    Makefile 慣例) 訂出一些使用 GNU 程序設計時撰寫 Makefile 的一些標 
   
    準和規范,但是內容很長而且很復雜, 并且經常做些調整,為了減輕程序 
   
    設計師維護 Makefile 的負擔,因此有了 Automake。  
 
   
    程序設計師只需寫一些預先定義好的巨集 (macro),交給 Automake 處理 
   
    後會產生一個可供 Autoconf 使用的 Makefile.in 檔。再配合利用 
   
    Autoconf 產生的自動設定檔 configure 即可產生一份符合 GNU Makefile 
   
    慣例的 Makeifle 了。  
 
   
    2. 上路之前  
 
   
    在開始試著用 Automake 之前,請先確認你的系統已經安裝以下的軟體:  
 
   
    1. GNU Automake  
   
    2. GNU Autoconf  
   
    3. GNU m4  
   
    4. perl  
   
    5. GNU Libtool (如果你需要產生 shared library)  
 
   
    我會建議你最好也使用 GNU C/C++ 編譯器 、GNU Make 以及其它 GNU 的 
   
    工具程序來做為開發的環境,這些工具都是屬於 Open Source Software 
   
    不僅免費而且功能強大。如果你是使用 Red Hat Linux 可以找到所有上述 
   
    軟體的 rpm 檔,FreeBSD 也有現成的 package 可以直接安裝,或著你也 
   
    可以自行下載這些軟體的原始檔回來 DIY。以下的范例是在 Red Hat 
   
    Linux 5.2 + CLE2 的環境下所完成的。  
 
   
    3. 一個簡單的例子  
 
   
    Automake 所產生的 Makefile 除了可以做到程序的編譯和連結,也已經把 
   
    如何產生程序文件 (如 manual page, info 檔及 dvi 檔) 的動作,還有 
   
    把原始程序包裝起來以供散 的動作都考慮進去了,所以原始程序所存放 
   
    的目錄架構最好符合 GNU 的標準慣例,接下來我拿 hello.c 來做為例 
   
    子。  
 
   
    在工作目錄下建立一個新的子目錄 ``devel'',再在 devel 下建立一個 
   
    ``hello'' 的子目錄,這個目錄將作為我們存放 hello 這個程序及其相關 
   
    檔案的地方:  
 
   
              % mkdir devel 
 
   
              % cd devel 
 
   
              % mkdir hello 
 
   
              % cd hello 
 
   
    用編輯器寫個 hello.c 檔,  
 
   
              #include <stdio.h> 
 
   
              int main(int argc, char** argv) 
   
              { 
   
                 printf(``Hello, GNU!\n''); 
   
                 return 0; 
   
              } 
 
 
   
    接下來就要用 Autoconf 及 Automake 來幫我們產生 Makefile 檔了,  
 
   
    1. 用 autoscan 產生一個 configure.in 的雛型,執行 autoscan 後會產 
   
              生一個configure.scan 的檔案,我們可以用它做為 configure.in 
   
              檔的藍本。  
 
   
                        % autoscan 
   
                        % ls 
   
                        configure.scan   hello.c 
 
   
    2. 編輯 configure.scan 檔,如下所示,并且把它的檔名改成  
   
              configure.in  
 
   
                        dnl Process this file with autoconf to produce a con 
figure script. 
 
   
                        AC_INIT(hello.c) 
 
   
                        AM_INIT_AUTOMAKE(hello, 1.0)  
 
   
                        dnl Checks for programs. 
 
   
                        AC_PROG_CC  
 
   
                        dnl Checks for libraries. 
 
   
                        dnl Checks for header files. 
 
   
                        dnl Checks for typedefs, structures, and compiler ch 
aracteristics. 
 
   
                        dnl Checks for library functions. 
 
   
                        AC_OUTPUT(Makefile) 
 
   
    3. 執行 aclocal 和 autoconf ,分別會產生 aclocal.m4 及 configure 兩 
   
              個檔案  
 
   
                        % aclocal 
 
   
                        % autoconf 
 
   
                        % ls 
 
   
                        aclocal.m4  configure  configure.in  hello.c 
 
   
    4. 編輯 Makefile.am 檔,內容如下  
 
   
                        AUTOMAKE_OPTIONS= foreign 
 
   
                        bin_PROGRAMS= hello 
 
   
                        hello_SOURCES= hello.c 
 
   
    5. 執行 automake --add-missing ,Automake 會根據 Makefile.am 檔產生 
   
              一些檔案,包含最重要的 Makefile.in  
 
   
                        % automake --add-missing 
 
   
                        automake: configure.in: installing `./install-sh' 
 
   
                        automake: configure.in: installing `./mkinstalldirs' 
 
 
   
                        automake: configure.in: installing `./missing' 
 
   
    6. 最後執行 ./configure ,  
 
   
                        % ./configure 
 
   
                        creating cache ./config.cache  
   
                        checking for a BSD compatible install... /usr/bin/in 
stall -c  
   
                        checking whether build environment is sane... yes  
   
                        checking whether make sets ${MAKE}... yes  
   
                        checking for working aclocal... found  
   
                        checking for working autoconf... found  
   
                        checking for working automake... found  
   
                        checking for working autoheader... found  
   
                        checking for working makeinfo... found  
   
                        checking for gcc... gcc  
   
                        checking whether the C compiler (gcc ) works... yes  
 
   
                        checking whether the C compiler (gcc ) is a cross-co 
mpiler... no  
   
                        checking whether we are using GNU C... yes  
   
                        checking whether gcc accepts -g... yes  
   
                        updating cache ./config.cache  
   
                        creating ./config.status  
   
                        creating Makefile  
 
   
    現在你的目錄下已經產生了一個 Makefile 檔,下個 ``make'' 指令就可 
   
    以開始編譯 hello.c 成執行檔,執行 ./hello 和 GNU 打聲招呼吧!  
 
   
              % make 
 
   
              gcc -DPACKAGE=\"hello\" -DVERSION=\"1.0\" -I. -I. -g -O2 -c he 
llo.c 
 
   
              gcc -g -O2 -o hello hello.o 
 
   
              % ./hello 
 
   
              Hello! GNU! 
 
   
    你還可以試試 ``make clean'',''make install'',''make dist'' 看看 
   
    會有什麼結果。你也可以把產生出來的 Makefile 秀給你的老板,讓他從 
   
    此對你刮目相看 :-)  
 
   
    4. 一探究竟  
 
   
    上述產生 Makefile 的過程和以往自行編寫的方式非常不一樣,舍棄傳統 
   
    自行定義 make 的規則,使用 Automake 只需用到一些已經定義好的巨集 
   
    即可。我們把巨集及目標 (target) 寫在 Makefile.am 檔內,Automake 
   
    讀入 Makefile.am 檔後會把這一串已經定義好的巨集展開并且產生對應的 
   
    Makefile.in 檔, 然後再由 configure 這個 shell script 根據 
   
    Makefile.in 產生適合的 Makefile。  
 
 
   
            [Figure 1:利用 autoconf 及 automake 產生 Makefile 的流程]  
 
   
    上圖中表示在上一節范例中所要用的檔案以及產生出來的檔案,有星號 
   
    (*) 者代表可執行檔。在此范例中可藉由 Autoconf 及 Automake 工具所 
   
    產生的檔案有 configure.scan、aclocal.m4、configure、Makefile.in, 
   
    需要我們加入設定者為 configure.in 及 Makefile.am。  
 
   
    4.1 編輯 configure.in 檔  
 
   
    Autoconf 是用來產生 'configure' 檔的工具。'configure' 是一個 
   
    shell script,它可以自動設定原始程序以符合各種不同平臺上 Unix 系 
   
    統的特性,并且根據系統叁數及環境產生合適的 Makefile 檔或是C 的標 
   
    頭檔 (header file),讓原始程序可以很方便地在這些不同的平臺上被編 
   
    譯出來。Autoconf 會讀取 configure.in 檔然後產生 'configure' 這個 
   
    shell script。  
 
   
    configure.in 檔的內容是一連串 GNU m4 的巨集,這些巨集經過 
   
    autoconf 處理後會變成檢查系統特徵的 shell script。configure.in 內 
   
    巨集的順序并沒有特別的規定,但是每一個 configure.in 檔必須在所有 
   
    巨集前加入 AC_INIT 巨集,然後在所有巨集的最後面加上 AC_OUTPUT 巨 
   
    集。我們可先用 autoscan 掃描原始檔以產生一個 configure.scan 檔, 
   
    再對 configure.scan 做些修改成 configure.in 檔。在范例中所用到的 
   
    巨集如下:  
 
   
    dnl  
   
              這個巨集後面的字不會被處理,可視為注解。  
   
    AC_INIT(FILE)  
   
              這個巨集用來檢查原始碼所在的路徑,autoscan 會自動產生,我們 
   
              不必修改它。  
   
    AM_INIT_AUTOMAKE(PACKAGE,VERSION)  
   
              這是使用 Automake 所必備的巨集,PACKAGE 是我們所要產生軟體套 
   
              件的名稱,VERSION 是版本編號。  
   
    AC_PROG_CC  
   
              檢查系統可用的 C 編譯器,如果原始程序是用 C 寫的就需要這個巨 
   
              集。  
   
    AC_OUTPUT(FILE)  
   
              設定 configure 所要產生的檔案,如果是 Makefile 的話, 
   
              configure 便會把它檢查出來的結果帶入 Makefile.in 檔然後產生 
   
              合適的 Makefile。  
 
   
    實際上,我們使用 Automake 時,還須要一些其它的巨集,這些額外的巨 
   
    集我們用 aclocal 來幫我們產生。執行 aclocal 會產生 aclocal.m4  
   
    檔,如果沒有特別的用途,我們可以不必修改它,用 aclocal 所產生的巨 
   
    集會告訴 Automake 怎麼做。  
 
   
    有了 configure.in 及 aclocal.m4 兩個檔案後,便可以執行 autoconf 
   
    來產生 configure 檔了。  
 
   
    4.2 編輯 Makefile.am 檔  
 
   
    接下來我們要編輯 Makefile.am 檔,Automake 會根據 configure.in 中 
   
    的巨集把Makefile.am 轉成 Makefile.in 檔。Makefile.am 檔定義我們所 
   
    要產的目標:  
 
   
    AUTOMAKE_OPTIONS  
   
              設定 automake 的選項。Automake 主要是幫助開發 GNU 軟體的人員 
   
              維護軟體套件,所以在執行 automake 時,會檢查目錄下是否存在標 
   
              準 GNU 軟體套件中應具備的文件檔案,例如 'NEWS'、'AUTHOR'、 
   
              'ChangeLog' 等文件檔。設成 foreign 時,automake 會改用一般軟 
   
              體套件的標準來檢查。  
   
    bin_PROGRAMS  
   
              定義我們所要產生的執行檔檔名。如果要產生多個執行檔,每個檔名 
   
              用空白字元隔開。  
   
    hello_SOURCES  
   
              定義 'hello' 這個執行檔所需要的原始檔。如果 'hello' 這個程序 
   
              是由多個原始檔所產生,必須把它所用到的原始檔都列出來,以空白 
   
              字元隔開。假設 'hello' 這個程序需要 'hello.c'、'main.c'、 
   
              'hello.h' 三個檔案的話,則定義  
 
   
                        hello_SOURCES= hello.c main.c hello.h  
   
    如果我們定義多個執行檔,則對每個執行檔都要定義相對的 
   
    filename_SOURCES。  
 
   
    編輯好 Makefile.am 檔,就可以用 automake --add-missing 來產生 
   
    Makefile.in。加上 --add-missing 選項是告訴 automake 順便幫我們加 
   
    入包裝一個軟體套件所必備的檔案。Automake 產生出來的 Makefile.in 
   
    檔是完全符合 GNU Makefile 的慣例,我們只要執行 configure 這個 
   
    shell script 便可以產生合適的 Makefile 檔了。  
 
   
    4.3 使用 Makefile  
 
   
    利用 configure 所產生的 Makefile 檔有幾個預設的目標可供使用,我們 
   
    只拿其中幾個簡述如下:  
 
   
    make all  
   
              產生我們設定的目標,即此范例中的執行檔。只打 make 也可以,此 
   
              時會開始編譯原始碼,然後連結,并且產生執行檔。  
   
    make clean  
   
              清除之前所編譯的執行檔及目的檔 (object file, *.o)。  
   
    make distclean  
   
              除了清除執行檔和目的檔外,也把 configure 所產生的 Makefile 
   
              也清除掉。  
   
    make install  
   
              將程序安裝至系統中。如果原始碼編譯無誤,且執行結果正確,便可 
   
              以把程序安裝至系統預設的執行檔存放路徑。如果我們用 
   
              bin_PROGRAMS 巨集的話,程序會被安裝至 /usr/local/bin 這個目 
   
              錄。  
   
    make dist  
   
              將程序和相關的檔案包裝成一個壓縮檔以供散播 (distribution) 。 
   
              執行完在目錄下會產生一個以 PACKAGE-VERSION.tar.gz 為名稱的檔 
   
              案。PACKAGE 和 VERSION 這兩個變數是根據 configure.in 檔中 
   
              AM_INIT_AUTOMAKE(PACKAGE, VERSION) 的定義。在此范例中會產生 
   
              'hello-1.0.tar.gz' 的檔案。  
   
    make distcheck  
   
              和 make dist 類似,但是加入檢查包裝後的壓縮檔是否正常。這個 
   
              目標除了把程序和相關檔案包裝成 tar.gz 檔外,還會自動把這個壓 
   
              縮檔解開,執行 configure,并且進行 make all 的動作,確認編譯 
   
              無誤後,會顯示這個 tar.gz 檔已經準備好可供散播了。這個檢查非 
   
              常有用,檢查過關的套件,基本上可以給任何一個具備 GNU 發展環 
   
              境的人去重新編譯。就 hello-1.tar.gz 這個范例而言,除了在 Red 
   
              Hat Linux 上,在 FreeBSD 2.2.x 版也可以正確地重新編譯。  
 
   
    要注意的是,利用 Autoconf 及 Automake 所產生出來的軟體套件是可以 
   
    在沒有安裝 Autoconf 及 Automake 的環境上使用的,因為 configure 是 
   
    一個 shell script,它己被設計可以在一般 Unix 的 sh 這個 shell 下 
   
    執行。但是如果要修改 configure.in 及 Makefile.am 檔再產生新的 
   
    configure 及 Makefile.in 檔時就一定要有 Autoconf 及 Automake 了。 
 
   
    5. 相關訊息  
 
   
    Autoconf 和 Automake 功能十分強大,你可以從它們所附的 info 檔找到 
   
    詳細的用法。你也可以從許多現存的 GNU 軟體或 Open Source 軟體中找 
   
    到相關的 configure.in 或 Makefile.am 檔,它們是學習 Autoconf 及 
   
    Automake 更多技巧的最佳范例。  
 
   
    這篇簡介只用到了 Autoconf 及 Automake 的皮毛罷了,如果你有心加入 
   
    Open Source 軟體開發的行列,希望這篇文件能幫助你對產生 Makefile 
   
    有個簡單的依據。其它有關開發 GNU 程序或 C 程序設計及 Makefile 的 
   
    詳細運用及技巧,我建議你從 GNU Coding Standards3 (GNU 編碼標準規 
   
    定) 讀起,里面包含了 GNU Makefile 慣例,還有發展 GNU 軟體套件的標 
   
    準程序和慣例。這些 GNU 軟體的線上說明文件可以在  
   
    http://www.gnu.org/ 這個網站上找到。  
 
   
    6. 結語  
 
   
    經由 Autoconf 及 Automake 的輔助,產生一個 Makefile 似乎不再像以 
   
    前那麼困難了,而使用 Autoconf 也使得我們在不同平臺上或各家 Unix 
   
    之間散播及編譯程序變得簡單,這對於在 Unix 系統上開發程序的人員來 
   
    說減輕了許多負擔。妥善運用這些 GNU 的工具軟體,可以幫助我們更容易 
   
    去發展程序,而且更容易維護原始程序碼。  
 
   
    一九九八年是 Open Source 運動風起云涌的一年,許多 Open Source 的 
   
    軟體普遍受到網路上大眾的歡迎和使用。感謝所有為 Open Source 奉獻的 
   
    人們,也希望藉由本文能吸引更多的人加入『自由』、『開放』的 Open 
   
    Source 行列。  
 
   
    About this document ...  
 
   
    輕輕松松產生 Makefile1 
 
   
    This document was generated using the LaTeX2HTML translator 
   
    Version 98.2 beta6 (August 14th, 1998)  
 
   
    Copyright (C) 1993, 1994, 1995, 1996, Nikos Drakos, Computer 
   
    Based Learning Unit, University of Leeds.  
   
    Copyright (C) 1997, 1998, Ross Moore, Mathematics Department, 
   
    Macquarie University, Sydney.  
 
   
    The command line arguments were:  
   
    latex2html -split 0 -show_section_numbers automake.tex  
 
   
    The translation was initiated by on 1999-02-11  
 
 
   
    Footnotes 
 
   
    ...\title1  
   
              本文件使用 ChiLaTeX 制作。  
   
    ... CLE2  
   
              CLE (Chinese Linux Extension,Linux 中文延伸套件), 
   
              http://cle.linux.org.tw/  
   
    ... Standards3  
   
              GNU Coding Standards, Richard Stallman
posted on 2009-12-25 14:16 老馬驛站 閱讀(180) 評論(0)  編輯 收藏 引用 所屬分類: linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲久久一区二区| 国产欧美一二三区| 一区二区免费在线视频| 玖玖玖免费嫩草在线影院一区| 亚洲在线第一页| 亚洲欧美国产毛片在线| 亚洲一区3d动漫同人无遮挡| 亚洲午夜国产一区99re久久 | 亚洲精品在线免费| 亚洲国产精品激情在线观看| 欧美a级片网| 亚洲日本一区二区| 亚洲男人的天堂在线观看 | 亚洲在线一区二区| 午夜亚洲福利在线老司机| 久久高清一区| 欧美激情精品久久久久| 久久九九免费视频| 在线播放亚洲| 日韩视频不卡| 欧美在线播放一区二区| 卡通动漫国产精品| 99精品国产在热久久下载| 欧美在线二区| 欧美日韩三级一区二区| 国产一区二区三区四区五区美女| 亚洲国产视频一区二区| 亚洲视频一二| 你懂的国产精品| 一区二区电影免费观看| 久久免费视频一区| 国产精品毛片a∨一区二区三区| 国产亚洲精品久久久久婷婷瑜伽 | 欧美顶级少妇做爰| 国产精品视频yy9099| 亚洲国产精品999| 香蕉久久国产| 最近看过的日韩成人| 欧美一区日本一区韩国一区| 欧美二区在线观看| 狠狠干综合网| 欧美一级专区| 一本色道久久综合亚洲精品高清 | 亚洲欧美日韩系列| 亚洲国产精品成人va在线观看| 亚洲宅男天堂在线观看无病毒| 欧美精品亚洲二区| 亚洲国产毛片完整版| 午夜在线精品偷拍| 中文欧美日韩| 欧美日韩伦理在线免费| 亚洲黄色视屏| 欧美刺激性大交免费视频| 欧美一级黄色网| 国产日本欧美视频| 亚洲欧美日韩在线观看a三区 | 亚洲欧美在线高清| 国产精品嫩草99av在线| 亚洲调教视频在线观看| 亚洲免费不卡| 欧美日韩在线亚洲一区蜜芽| 亚洲国产一区二区在线| 欧美成人一区二区三区在线观看| 久久国产精品免费一区| 国产在线播精品第三| 久久精品国产精品亚洲| 西瓜成人精品人成网站| 国产一级久久| 国产精品日韩在线| 国产精品国产三级国产aⅴ无密码| a91a精品视频在线观看| 日韩小视频在线观看| 欧美激情1区2区3区| 亚洲欧洲日夜超级视频| 亚洲日本无吗高清不卡| 欧美视频中文一区二区三区在线观看 | 女女同性精品视频| 欧美jjzz| 亚洲尤物在线| 性欧美精品高清| 在线看日韩欧美| 欧美激情1区| 欧美日韩日日骚| 欧美一区三区三区高中清蜜桃| 亚洲欧美综合一区| 在线日韩欧美| 亚洲日本va午夜在线电影| 欧美日韩午夜激情| 欧美一区激情视频在线观看| 久久视频精品在线| 亚洲天天影视| 久久久一区二区| 亚洲一区二区三区色| 欧美在线一区二区三区| 91久久夜色精品国产网站| 亚洲裸体在线观看| 国内精品久久久久久| 亚洲人成人一区二区三区| 国产精品专区第二| 亚洲高清视频在线| 国产精品蜜臀在线观看| 欧美高清视频www夜色资源网| 欧美日韩国产一区二区| 久久婷婷国产综合精品青草| 欧美日韩国产一区二区三区| 久久漫画官网| 欧美日韩视频| 欧美va亚洲va国产综合| 国产人妖伪娘一区91| 91久久久亚洲精品| 韩国三级电影久久久久久| 夜夜嗨网站十八久久| 亚洲第一福利视频| 亚洲综合三区| 夜夜夜精品看看| 久久人人看视频| 欧美在线观看视频一区二区三区 | 国产精品美女在线| 亚洲人成网站999久久久综合| 狠狠色综合色区| 小黄鸭视频精品导航| 亚洲一级在线观看| 午夜天堂精品久久久久| 亚洲欧美变态国产另类| 一本高清dvd不卡在线观看| 久久精品国产一区二区三| 亚洲欧美日韩国产中文| 欧美日韩激情小视频| 亚洲韩国精品一区| 亚洲国产日韩在线| 久久精品亚洲乱码伦伦中文| 小嫩嫩精品导航| 国产乱理伦片在线观看夜一区| 日韩午夜免费| 一区二区成人精品| 欧美精品久久一区二区| 亚洲国产导航| 亚洲精品久久久久久久久久久久久 | 久久国产精品久久精品国产| 国产精品日韩二区| 亚洲欧美在线x视频| 羞羞答答国产精品www一本| 国产精品久久久久久久久久ktv| 99精品热视频| 亚洲欧美日韩一区在线| 国产日韩欧美成人| 欧美亚洲在线观看| 久久久国产精品一区二区三区| 国产日韩三区| 久久午夜视频| 亚洲日本视频| 欧美在线观看视频一区二区| 韩日欧美一区| 欧美精品999| 亚洲欧美日韩人成在线播放| 欧美一区二粉嫩精品国产一线天| 国产亚洲一二三区| 久久一区二区精品| 亚洲欧洲精品成人久久奇米网| 一本色道久久88综合日韩精品| 欧美精品自拍偷拍动漫精品| 亚洲午夜日本在线观看| 久久亚洲影院| 99精品欧美一区二区三区| 国产精品久久久久77777| 性做久久久久久久免费看| 免费观看成人网| 亚洲一二区在线| 国产亚洲精品久久久| 免费日韩av片| 亚洲欧美日韩国产综合| 女仆av观看一区| 亚洲欧美另类在线观看| 一区二区视频欧美| 欧美日韩国产综合视频在线观看中文| 亚洲桃花岛网站| 蜜臀a∨国产成人精品| 亚洲视频网在线直播| 国内自拍视频一区二区三区| 欧美日韩国产首页在线观看| 欧美在线观看一区二区| 亚洲日本va午夜在线影院| 久久国产精品久久w女人spa| 亚洲精品之草原avav久久| 国产精品日本精品| 免费观看日韩av| 欧美一级视频精品观看| 亚洲人成7777| 免费欧美在线视频| 亚洲影视综合| 午夜在线一区二区| 99在线热播精品免费99热| 国产欧美91| 欧美日韩国产综合网| 久久精品盗摄| 亚洲一区二区三区在线| 亚洲国产成人久久综合| 久久青青草综合| 亚欧成人精品| 亚洲欧美日韩精品久久久久|