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

隨筆-167  評(píng)論-8  文章-0  trackbacks-0

作為L(zhǎng)inux下的程序開(kāi)發(fā)人員,大家一定都遇到過(guò)Makefile,用make命令來(lái)編譯自己寫的程序確實(shí)是很方便.一般情況下,大家都是手工寫一個(gè)簡(jiǎn)單Makefile,如果要想寫出一個(gè)符合自由軟件慣例的Makefile就不那么容易了.

在本文中,將給大家介紹如何使用autoconf和automake兩個(gè)工具來(lái)幫助我們自動(dòng)地生成符合自由軟件慣例的 Makefile,這樣就可以象常見(jiàn)的 GNU程序一樣,只要使用”./configure”,”make”,”make instal”就可以把程序安裝到Linux系統(tǒng)中去了.

這將特別適合想做開(kāi)放源代碼軟件的程序開(kāi)發(fā)人員,又或如果你只是自己寫些小的Toy程序,那么這個(gè)文章對(duì)你也會(huì)有很大的幫助.
 

一.Makefile介紹

  Makefile是用于自動(dòng)編譯和鏈接的 ,一個(gè)工程有很多文件組成,每一個(gè)文件的改變都會(huì)導(dǎo)致工程的重新鏈接,但是不是 所有的文件都需要重新編譯,Makefile中紀(jì)錄有文件的信息,在 make時(shí)會(huì)決定在鏈接的時(shí)候需要重新編譯哪些文件.
 
  Makefile的宗旨就是 :讓編譯器知道要編譯一個(gè)文件需要依賴其他的 哪些文件.當(dāng)那些依賴文件有了改變,編譯器會(huì)自動(dòng)的發(fā)現(xiàn)最終的生成文件已經(jīng)過(guò)時(shí),而重新編譯相應(yīng)的 模塊.
  
Makefile的 基本結(jié)構(gòu)不是 很復(fù)雜,但當(dāng)一個(gè)程序開(kāi)發(fā)人員開(kāi)始寫Makefile時(shí),經(jīng)常會(huì)懷疑自己寫的 是 否符合慣例,而且自己寫的 Makefile經(jīng)常和自己的 開(kāi)發(fā)環(huán)境相關(guān)聯(lián),當(dāng)系統(tǒng)環(huán)境變量或路徑發(fā)生了變化后,Makefile可能還要跟著修改.這樣就造成了手工書(shū)寫Makefile的 諸多問(wèn)題,automake恰好能很好地幫助我們解決這些問(wèn)題.
  
使用automake,程序開(kāi)發(fā)人員只需要寫一些簡(jiǎn)單的 含有預(yù)定義宏的 文件,由autoconf根據(jù)一個(gè)宏文件生成configure,由automake根據(jù)另一個(gè)宏文件生成Makefile.in,再使用configure依據(jù)Makefile.in來(lái)生成一個(gè)符合慣例的 Makefile.下面我們將詳細(xì)介紹Makefile的 automake生成方法.
  

二.使用的 環(huán)境

  本文所提到的 程序是 基于Linux發(fā)行版本:Fedora Core release 1,它包含了我們要用到的 autoconf,automake.

  

三.從helloworld入手

  我們從大家最常使用的 例子程序helloworld開(kāi)始.

  下面的 過(guò)程如果簡(jiǎn)單地說(shuō)來(lái)就是 :

  新建三個(gè)文件:

  1.    helloworld.c
  2.    configure.in
  3.    Makefile.am

  然后執(zhí)行:

  1. aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld

  就可以看到Makefile被產(chǎn)生出來(lái),而且可以將helloworld.c編譯通過(guò).

  很簡(jiǎn)單吧,幾條命令就可以做出一個(gè)符合慣例的 Makefile,感覺(jué)如何呀.

  現(xiàn)在 開(kāi)始介紹詳細(xì)的 過(guò)程:

  1.建目錄

  在 你的 工作目錄下建一個(gè)helloworld目錄,我們用它來(lái)存放helloworld程序及相關(guān)文件,如在 /home/my/build下:

  1. $ mkdir helloword
  2. $ cd helloworld

  2. helloworld.c

  然后用你自己最喜歡的 編輯器寫一個(gè)hellowrold.c文件,如命令:vi helloworld.c.使用下面的 代碼作為helloworld.c的 內(nèi)容.

  1. #include <stdio.h>
  2. int main(int argc, char** argv){
  3.      printf("%s", 'Hello, Linux World!\n");
  4.      return 0;
  5. }

  完成后保存退出.
  現(xiàn)在 在 helloworld目錄下就應(yīng)該有一個(gè)你自己寫的 helloworld.c了.

  3.生成configure

  我們使用autoscan命令來(lái)幫助我們根據(jù)目錄下的 源代碼生成一個(gè)configure.in的 模板文件.
  命令:

  1. $ autoscan
  2. $ ls
  3. configure.scan helloworld.c

  執(zhí)行后在 hellowrold目錄下會(huì)生成一個(gè)文件:configure.scan,我們可以拿它作為configure.in的 藍(lán)本.
  現(xiàn)在 將configure.scan改名為configure.in,并且編輯它,按下面的 內(nèi)容修改,去掉無(wú)關(guān)的 語(yǔ)句:

  1. ==========================configure.in內(nèi)容開(kāi)始=========================================
  2. # -*- Autoconf -*-
  3. # Process this file with autoconf to produce a configure script.
  4. AC_INIT(helloworld.c)
  5. AM_INIT_AUTOMAKE(helloworld, 1.0)
  6. # Checks for programs.
  7. AC_PROG_CC
  8. # Checks for libraries.
  9. # Checks for header files.
  10. # Checks for typedefs, structures, and compiler characteristics.
  11. # Checks for library functions.
  12. AC_OUTPUT(Makefile)
  13. ==========================configure.in內(nèi)容結(jié)束=========================================

  然后執(zhí)行命令aclocal和autoconf,分別會(huì)產(chǎn)生aclocal.m4及configure兩個(gè)文件:

  1. $ aclocal
  2. $ls
  3. aclocal.m4 configure.in helloworld.c
  4. $ autoconf
  5. $ ls
  6. aclocal.m4 autom4te.cache configure configure.in helloworld.c

  大家可以看到configure.in內(nèi)容是 一些宏定義,這些宏經(jīng)autoconf處理后會(huì)變成檢查系統(tǒng)特性.環(huán)境變量.軟件必須的 參數(shù)的 shell腳本.

  autoconf 是 用來(lái)生成自動(dòng)配置軟件源代碼腳本(configure)的 工具.configure腳本能獨(dú)立于autoconf運(yùn)行,且在 運(yùn)行的 過(guò)程中,不需要用戶的 干預(yù).

  要生成configure文件,你必須告訴autoconf如何找到你所用的 宏.方式是 使用aclocal程序來(lái)生成你的 aclocal.m4.

  aclocal根據(jù)configure.in文件的 內(nèi)容,自動(dòng)生成aclocal.m4文件.aclocal是 一個(gè)perl 腳本程序,它的 定義是 :”aclocal – create aclocal.m4 by scanning configure.ac”.

  autoconf從configure.in這個(gè)列舉編譯軟件時(shí)所需要各種參數(shù)的 模板文件中創(chuàng)建configure.

  autoconf需要GNU m4宏處理器來(lái)處理aclocal.m4,生成configure腳本.

  m4是 一個(gè)宏處理器.將輸入拷貝到輸出,同時(shí)將宏展開(kāi).宏可以是 內(nèi)嵌的 ,也可以是 用戶定義的 .除了可以展開(kāi)宏,m4還有一些內(nèi)建的 函數(shù),用來(lái)引用文件,執(zhí)行命令,整數(shù)運(yùn)算,文本操作,循環(huán)等.m4既可以作為編譯器的 前端,也可以單獨(dú)作為一個(gè)宏處理器.

4.新建Makefile.am
  新建Makefile.am文件,命令:

  1. $ vi Makefile.am
  2.   內(nèi)容如下:
  3. AUTOMAKE_OPTIONS=foreign
  4. bin_PROGRAMS=helloworld
  5. helloworld_SOURCES=helloworld.c

  automake會(huì)根據(jù)你寫的 Makefile.am來(lái)自動(dòng)生成Makefile.in.

  Makefile.am中定義的 宏和目標(biāo),會(huì)指導(dǎo)automake生成指定的 代碼.例如,宏bin_PROGRAMS將導(dǎo)致編譯和連接的 目標(biāo)被生成.
  5.運(yùn)行automake:

  1. $ automake --add-missing
  2. configure.in: installing `./install-sh'
  3. configure.in: installing `./mkinstalldirs'
  4. configure.in: installing `./missing'
  5. Makefile.am: installing `./depcomp'

  automake會(huì)根據(jù)Makefile.am文件產(chǎn)生一些文件,包含最重要的 Makefile.in.

  6.執(zhí)行configure生成Makefile

  1. $./configure
  2. checking for a BSD-compatible install... /usr/bin/install -c
  3. checking whether build environment is sane... yes
  4. checking for gawk... gawk
  5. checking whether make sets $(MAKE)... yes
  6. checking for gcc... gcc
  7. checking for C compiler default output... a.out
  8. checking whether the C compiler works... yes
  9. checking whether we are cross compiling... no
  10. checking for suffix of executables...
  11. checking for suffix of object files... o
  12. checking whether we are using the GNU C compiler... yes
  13. checking whether gcc accepts -g... yes
  14. checking for gcc option to accept ANSI C... none needed
  15. checking for style of include used by make... GNU
  16. checking dependency style of gcc... gcc3
  17. configure: creating ./config.status
  18. config.status: creating Makefile
  19. config.status: executing depfiles commands
  20. $ ls -l Makefile
  21. -rw-rw-r-- 1 yutao yutao 15035 Oct 15 10:40 Makefile

你可以看到,此時(shí)Makefile已經(jīng)產(chǎn)生出來(lái)了.

7.使用Makefile編譯代碼

  1. $make
  2. if gcc -DPACKAGE_NAME=\"FULL-PACKAGE-NAME\" -DPACKAGE_TARNAME=\"full-package-name\" -DPACKAGE_VERSION=\"VERSION\" -DPACKAGE_STRING=\"FULL-PACKAGE-NAME\ VERSION\" -DPACKAGE_BUGREPORT=\"BUG-REPORT-ADDRESS\" -DPACKAGE=\"helloworld\" -DVERSION=\"1.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -I. -I. -g -O2 -MT helloworld.o -MD -MP -MF ".deps/helloworld.Tpo" -c -o helloworld.o helloworld.c; \
  3. then mv -f ".deps/helloworld.Tpo" ".deps/helloworld.Po"; else rm -f ".deps/helloworld.Tpo"; exit 1; fi
  4. gcc -g -O2 -o helloworld helloworld.o

  運(yùn)行helloworld

  1. $ ./helloworld
  2. Hello, Linux World!

  這樣helloworld就編譯出來(lái)了,你如果按上面的 步驟來(lái)做的 話,應(yīng)該也會(huì)很容易地編譯出正確的 helloworld文件.你還可以試著使用一些其他的 make命令,如make clean,make install,make dist,看看它們會(huì)給你什么樣的 效果.感覺(jué)如何?自己也能寫出這么專業(yè)的 Makefile,老板一定會(huì)對(duì)你刮目相看.

四.深入淺出

  針對(duì)上面提到的 各個(gè)命令,我們?cè)僮鲂┰敿?xì)的 介紹.

  1. autoscan   autoscan是 用來(lái)掃描源代碼目錄生成configure.scan文件的 .autoscan 可以用目錄名做為參數(shù),但如果你不使用參數(shù)的 話,那么autoscan將認(rèn)為使用的是當(dāng)前目錄. autoscan將掃描你所指定目錄中的 源文件,并創(chuàng)建configure.scan文件.   2. configure.scan   configure.scan包含了系統(tǒng)配置的 基本選項(xiàng),里面都是 一些宏定義.我們需要將它改名為 configure.in   3. aclocal   aclocal是 一個(gè)perl 腳本程序.aclocal根據(jù)configure.in文件的 內(nèi)容 ,自動(dòng)生成aclocal.m4文件.aclocal的 定義是 :"aclocal - create aclocal.m4 by scanning configure.ac".   4. autoconf   autoconf是 用來(lái)產(chǎn)生configure文件的 .configure是 一個(gè)腳本,它能設(shè)置 源程序來(lái)適應(yīng)各種不同的操作系統(tǒng)平臺(tái),并且根據(jù)不同的 系統(tǒng)來(lái)產(chǎn)生合適的 Makefile,從而可以使 你的源代碼能在不同的操作系統(tǒng)平臺(tái)上被編譯出來(lái).   configure.in文件的 內(nèi)容是 一些宏,這些宏經(jīng)過(guò)autoconf 處理后會(huì)變成檢查系統(tǒng) 特性.環(huán)境變量.軟件必須的 參數(shù)的 shell腳本.configure.in文件中的 宏的 順序并沒(méi) 有規(guī)定,但是 你必須在 所有宏的 最前面和最后面分別加上AC_INIT宏和AC_OUTPUT宏.   在 configure.ini中:   #號(hào)表示注釋,這個(gè)宏后面的 內(nèi)容將被忽略.   AC_INIT(FILE)   這個(gè)宏用來(lái)檢查源代碼所在 的 路徑. AM_INIT_AUTOMAKE(PACKAGE, VERSION)    這個(gè)宏是 必須的 ,它描述了我們將要生成的 軟件包的 名字及其版本號(hào):PACKAGE是軟件包 的名字,VERSION是 版本號(hào).當(dāng)你使用make dist命令時(shí),它會(huì)給你生成一個(gè)類似 helloworld-1.0.tar.gz的 軟件發(fā)行包,其中就有對(duì)應(yīng)的 軟件包的 名字和版本號(hào). AC_PROG_CC   這個(gè)宏將檢查系統(tǒng)所用的 C編譯器. AC_OUTPUT(FILE)   這個(gè)宏是 我們要輸出的 Makefile的 名字.   我們?cè)?使用automake時(shí),實(shí)際上還需要用到其他的 一些宏,但我們可以用aclocal 來(lái)幫 我們自動(dòng)產(chǎn)生.執(zhí)行aclocal后我們會(huì)得到aclocal.m4文件.   產(chǎn)生了configure.in和aclocal.m4 兩個(gè)宏文件后,我們就可以使用autocon f來(lái)產(chǎn)生configure文件了.   5. Makefile.am   Makefile.am是 用來(lái)生成Makefile.in的 ,需要你手工書(shū)寫.Makefile. am中定義了一些內(nèi)容: AUTOMAKE_OPTIONS   這個(gè)是 automake的 選項(xiàng).在 執(zhí)行automake時(shí),它會(huì)檢查目錄下是 否存在 標(biāo)準(zhǔn) GNU軟件包中應(yīng)具備的各種文件,例如AUTHORS.ChangeLog.NEWS等文件. 我們將其設(shè)置成foreign時(shí),automake會(huì)改用一般軟件包的 標(biāo)準(zhǔn)來(lái)檢查. bin_PROGRAMS   這個(gè)是 指定我們所要產(chǎn)生的 可執(zhí)行文件的 文件名.如果你要產(chǎn)生多個(gè)可執(zhí)行文件, 那么在各個(gè)名字間用空格隔開(kāi). helloworld_SOURCES   這個(gè)是 指定產(chǎn)生"helloworld"時(shí)所需要的 源代碼.如果它用到了多個(gè)源文件, 那么請(qǐng)使用空格符號(hào)將它們隔開(kāi).比如需要helloworld.h,helloworld.c那么請(qǐng)寫成: helloworld_SOURCES= helloworld.h helloworld.c.   如果你在 bin_PROGRAMS定義了多個(gè)可執(zhí)行文件,則對(duì)應(yīng)每個(gè)可執(zhí)行文件都要定義相對(duì)的 filename_SOURCES.   6. automake   我們使用automake --add-missing來(lái)產(chǎn)生Makefile.in.   選項(xiàng)--add-missing的 定義是 "add missing standard files  to package",它會(huì)讓automake加入一個(gè)標(biāo)準(zhǔn)的 軟件包所必須的 一些文件.   我們用automake產(chǎn)生出來(lái)的 Makefile.in文件是 符合GNU Makefile慣例 的 ,接下來(lái)我們只要執(zhí)行configure這個(gè)shell 腳本就可以產(chǎn)生合適的 Makefile 文 件了.   7. Makefile   在 符合GNU Makefiel慣例的 Makefile中,包含了一些基本的 預(yù)先定義的 操作:  make   根據(jù)Makefile編譯源代碼,連接,生成目標(biāo)文件,可執(zhí)行文件. make clean   清除上次的 make命令所產(chǎn)生的 object文件(后綴為".o"的 文件)及可執(zhí)行文件. make install   將編譯成功的 可執(zhí)行文件安裝到系統(tǒng)目錄中,一般為/usr/local/bin目錄. make dist   產(chǎn)生發(fā)布軟件包文件(即distribution package).這個(gè)命令將會(huì)將可執(zhí)行文件及相關(guān) 文件打包成一個(gè)tar.gz壓縮的 文件用來(lái)作為發(fā)布軟件的 軟件包.   它會(huì)在 當(dāng)前目錄下生成一個(gè)名字類似"PACKAGE-VERSION.tar.gz"的 文件.PA CKAGE和VERSION,是 我們?cè)?configure.in中定義的 AM_INIT_AUTOM AKE(PACKAGE, VERSION). make distcheck   生成發(fā)布軟件包并對(duì)其進(jìn)行測(cè)試檢查,以確定發(fā)布包的正確性. 

posted on 2012-09-21 11:31 老馬驛站 閱讀(487) 評(píng)論(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>
            久久精品主播| 美女亚洲精品| 午夜精品一区二区三区电影天堂 | 欧美激情一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久精品999| 美女视频网站黄色亚洲| 久久综合给合| 欧美二区在线看| 最新成人av在线| 亚洲日本理论电影| 一区二区三区免费在线观看| 99精品久久| 亚洲欧美视频在线| 欧美一二三视频| 久久综合中文| 欧美日韩八区| 国产精品一区在线观看| 国产亚洲精品自拍| 亚洲国产成人不卡| 一区二区三区免费观看| 午夜国产精品视频免费体验区| 亚洲欧美日本伦理| 久久久天天操| 欧美成人在线免费观看| 91久久精品一区| 亚洲一区高清| 久久婷婷人人澡人人喊人人爽 | 亚洲第一天堂av| 亚洲另类自拍| 亚洲欧美在线观看| 麻豆精品在线视频| 亚洲日本精品国产第一区| 亚洲在线视频| 欧美99久久| 国产精品久久久久久久久搜平片| 国产一区激情| 一本色道久久综合亚洲二区三区| 午夜在线不卡| 欧美高清视频| 亚洲午夜三级在线| 浪潮色综合久久天堂| 欧美午夜视频在线| 在线免费观看欧美| 亚洲专区一区二区三区| 久久亚洲私人国产精品va| 亚洲精品中文字幕在线| 欧美一区二区成人6969| 欧美精品在线一区二区| 国产亚洲福利社区一区| 一区二区电影免费观看| 久久视频在线看| 一本色道久久综合亚洲二区三区 | 一区二区三区国产精品| 久久婷婷av| 一区二区日韩欧美| 麻豆乱码国产一区二区三区| 欧美手机在线视频| 亚洲日韩欧美一区二区在线| 欧美一区二区三区在线观看视频| 亚洲国产精品美女| 欧美一区二区三区在线| 欧美日精品一区视频| 亚洲黄一区二区三区| 久久精品女人天堂| 亚洲午夜高清视频| 欧美日韩国产欧| 亚洲大片免费看| 久久国内精品视频| 中文精品视频| 欧美精品一区二区三区蜜臀| 韩国av一区二区三区| 午夜精品久久久久| 日韩视频―中文字幕| 久久亚洲不卡| 精品999成人| 久久国产精品久久久久久久久久 | 亚洲欧美一区二区激情| 亚洲人www| 欧美成人一二三| 亚洲激情一区二区| 免费看的黄色欧美网站| 欧美影院在线| 国产一区二区欧美| 久久xxxx精品视频| 午夜视频一区| 国产欧美日韩精品在线| 亚洲欧美中文另类| 亚洲小说春色综合另类电影| 欧美破处大片在线视频| 亚洲精品护士| 亚洲欧洲精品一区二区三区波多野1战4 | 一区二区三区欧美在线| 欧美精品一区二区三区很污很色的 | 亚洲精品看片| 欧美精品国产| 在线亚洲电影| av不卡免费看| 国产精品高潮呻吟久久av黑人| 一区二区三区国产在线| 日韩亚洲精品在线| 国产精品porn| 午夜在线电影亚洲一区| 亚洲自拍都市欧美小说| 国产伦精品一区二区三区高清版| 午夜亚洲福利| 午夜精品久久久久久99热| 国产人成一区二区三区影院| 久久riav二区三区| 久久久久久国产精品一区| 一区二区视频免费完整版观看| 久久躁日日躁aaaaxxxx| 久久久一二三| 亚洲人体偷拍| 一区二区三区欧美视频| 国产精品中文字幕在线观看| 久久精品人人做人人爽电影蜜月| 久久久777| 亚洲片国产一区一级在线观看| 亚洲欧洲一区二区三区| 欧美三级小说| 久久久久久高潮国产精品视| 久久午夜视频| 一区二区三区四区蜜桃| 亚洲一区在线播放| 极品日韩久久| 亚洲精品一二三区| 国产精品丝袜xxxxxxx| 久久野战av| 欧美日韩dvd在线观看| 亚洲欧美一区二区三区久久| 欧美在线日韩在线| 亚洲日本久久| 亚洲视频大全| 伊人精品在线| av成人手机在线| 国内精品久久久久久久果冻传媒| 欧美高清视频在线播放| 欧美日韩国内| 久久综合综合久久综合| 欧美女人交a| 久久精品在线| 欧美精品一区二区三区高清aⅴ| 欧美亚洲免费电影| 免费成人激情视频| 校园激情久久| 欧美肥婆在线| 久久国产精品72免费观看| 欧美成人dvd在线视频| 香蕉国产精品偷在线观看不卡| 另类图片国产| 欧美一区二区三区播放老司机| 噜噜噜久久亚洲精品国产品小说| 亚洲视频在线观看| 久久综合狠狠综合久久综合88| 亚洲网友自拍| 久久综合图片| 欧美综合二区| 欧美日韩在线精品| 老司机久久99久久精品播放免费 | 亚洲国产欧美一区二区三区同亚洲 | 最新亚洲视频| 性一交一乱一区二区洋洋av| 亚洲精品久久| 久久精品国产亚洲高清剧情介绍| 一区二区久久| 免费在线观看精品| 久久午夜电影| 国产欧美日韩亚洲精品| 亚洲精品视频在线| 亚洲国产黄色| 欧美一区二区在线播放| 亚洲一区免费网站| 欧美精品一区二区三区视频 | 久久精品免费电影| 欧美一区二区三区四区夜夜大片| 欧美—级a级欧美特级ar全黄| 久久婷婷一区| 国产日韩视频一区二区三区| 日韩视频精品在线| 亚洲人久久久| 蜜乳av另类精品一区二区| 久久久精品国产免大香伊| 国产精品久久久久久久久久尿 | 欧美揉bbbbb揉bbbbb| 欧美激情综合色综合啪啪 | 欧美母乳在线| 亚洲国产美国国产综合一区二区| 激情欧美一区二区三区在线观看 | 国产精品香蕉在线观看| 夜夜嗨av一区二区三区四区| 亚洲精品免费看| 牛牛影视久久网| 欧美1区2区| 亚洲福利专区| 美女视频黄免费的久久| 噜噜噜久久亚洲精品国产品小说| 国产亚洲欧美中文| 欧美一区二视频| 久久久久高清|