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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

autotools 自动编译系列简介

發布時間:2025/3/15 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 autotools 自动编译系列简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

autotools安裝

?

1.介紹


Linux環境下,我們編譯程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令進行編譯操作。這種方式一般是適用于程序文件比較少,組織結構比較簡單的情況。但是,當我們程序文件比較的多的時候,或者是程序文件組織結構比較的復雜(例如在程序文件夾中存在文件夾多層嵌套以及復雜引用等),此時我們如果是直接使用GCC一點一點的編譯工作量會非常的大,而且萬一程序修改了,還要重新的再工作一遍。為此,我們有了make工具,依靠Makefile輔助文件,我們可以方便的進行工程的管理,以及編譯操作。當程序很復雜的時候,依靠我們去手工的建立、維護Makefile文件是非常的不現實的,不僅很復雜,而且費時費力,還容易出錯。為此,就有了我們的_Autotools_工具或者 CMake 工具棧,而本文重點介紹的是 Autotool 管理 Makefile 的工具鏈。autotools 只要輸入工程中的目標文件、依賴文件、文件目錄等信息就可以自動生成Makefile。這時使用autotools工具就是一個不錯的選擇,只要輸入工程中的目標文件、依賴文件、文件目錄等信息就可以自動生成Makefile。autotools工具是個系列工具,主要有:aclocal、autoscan、autoconf、autoheader、automake。

?

2.autotools組成

名稱功能
autoscan?autoscan是用來掃描源代碼目錄生成configure.scan文件的。?? ?configure.scan包含了系統配置的基本選項,里面都是一些宏定義。我們需要將它改名為configure.in
aclocal?aclocal是一個perl腳本程序。aclocal根據configure.in文件的內容,自動生成aclocal.m4文件。aclocal的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”。?? ?生成的aclocal.m4是宏展開文件
autoconfautoconf是用來產生configure文件的??? ?configure.in文件的內容是一些宏,這些宏經過autoconf處理后會變成檢查系統特性、環境變量、軟件必須的參數的shell腳本
autoheader?自動生成config.h.in?? ?在configure生成config.h時候的in文件
automake我們使用automake --add-missing來產生Makefile.in??? ?Makefile.am是用來生成Makefile.in的,需要你手工書寫

?

3.autotools處理流程


Autotools使用流程:
1.目錄樹的最高層運行autoscan,生成configure.scan文件;
2.運行aclocal,生成aclocal.m4文件;
3.運行autoconf,生成configure配置腳本;
4.運行autoheader,生成config.h.in文件;
5.手工編寫Makefile.am文件;
6.運行automake,生成Makefile.in;
7.運行配置腳本configure,生成Makefile。

?

4.autotools安裝


[root@localhost ~]# yum install automake
安裝包:

automake-1.13.4-3.el7.noarch.rpm
autoconf-2.69-11.el7.noarch.rpm
perl-Test-Harness-3.28-3.el7.noarch.rpm
m4-1.4.16-10.el7.x86_64.rpm
?

autotools實例

1.生成源碼,并且確認代碼可以編譯執行

[root@localhost ~]#mkdir /home/mycode/auto_make_test/ [root@localhost ~]# cd /home/mycode/auto_make_test/ [root@localhost auto_make_test]# ll total 0 [root@localhost auto_make_test]# vim auto_test.c [root@localhost auto_make_test]# cat auto_test.c? #include <stdio.h>int main() {printf("auto make test\n");return 0; } [root@localhost auto_make_test]# gcc auto_test.c? [root@localhost auto_make_test]# ll total 16 -rwxr-xr-x 1 root root 8560 Jan ?5 17:01 a.out -rw-r--r-- 1 root root ? 81 Jan ?5 17:01 auto_test.c [root@localhost auto_make_test]# ./a.out? auto make test [root@localhost auto_make_test]# rm a.out? rm: remove regular file ‘a.out’? y

2.執行autoscan


第一步:在源碼目錄下執行autoscan命令。這個命令主要用于掃描工作目錄,并且生成configure.scan文件。configure.scan需要重命令成configure.ac,然后編輯這個配置,我們才能繼續執行后面的命令。

[root@localhost auto_make_test]# autoscan? [root@localhost auto_make_test]# ll total 8 -rw-r--r-- 1 root root ? 0 Jan ?5 17:35 autoscan.log -rw-r--r-- 1 root root ?81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root 471 Jan ?5 17:35 configure.scan [root@localhost auto_make_test]# mv configure.scan configure.ac

第二步:編輯上面得到的configure.ac文件。

[root@localhost auto_make_test]# cat configure.ac? # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -*- Autoconf -*- # Process this file with autoconf to produce a configure script.AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([auto_test.c]) AC_CONFIG_HEADERS([config.h])# Checks for programs. AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT [root@localhost auto_make_test]# vim configure.ac? [root@localhost auto_make_test]# cat configure.ac? # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -*- Autoconf -*- # Process this file with autoconf to produce a configure script.AC_PREREQ([2.69]) AC_INIT([auto_test], [1.0], [751773517@qq.com]) AC_CONFIG_SRCDIR([auto_test.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(auto_test,1.0)# Checks for programs. AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT(Makefile)

對比前后的文件可以發現修改的項目為:AC_INIT,AC_OUTPUT
增加了:AM_INIT_AUTOMAKE(auto_test,1.0)
configure.ac標簽說明如下表:

標簽功能
AC_PREREQ聲明autoconf要求的版本號。
AC_INIT?定義軟件名稱、版本號、聯系方式
AM_INIT_AUTOMAKE???必須要的,參數為軟件名稱和版本號
AC_CONFIG_SCRDIR?宏用來偵測所指定的源碼文件是否存在, 來確定源碼目錄的有效性.。此處為當前目錄下main.c
AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader命令使用。
AC_PROG_CC?指定編譯器,默認是GCC
AC_CONFIG_FILES生成相應的Makefile文件,不同文件夾下的Makefile通過空格分隔。例如:AC_CONFIG_FILES([Makefile, src/Makefile])
AC_OUTPUT用來設定 configure 所要產生的文件,如果是makefile,configure 會把它檢查出來的結果帶入makefile.in文件產生合適的makefile。

?? ?
?

3.執行aclocal??

執行aclocal命令,掃描 configure.ac 文件生成 aclocal.m4文件, 該文件主要處理本地的宏定義,它根據已經安裝的宏、用戶定義宏和 acinclude.m4 文件中的宏將 configure.ac 文件需要的宏集中定義到文件 aclocal.m4 中。

[root@localhost auto_make_test]# aclocal [root@localhost auto_make_test]# ll total 52 -rw-r--r-- 1 root root 37794 Jan ?5 17:43 aclocal.m4 drwxr-xr-x 2 root root ?4096 Jan ?5 17:43 autom4te.cache -rw-r--r-- 1 root root ? ? 0 Jan ?5 17:42 autoscan.log -rw-r--r-- 1 root root ? ?81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root ? 499 Jan ?5 17:38 configure.ac


?4.執行autoconf


這個命令將 configure.ac 文件中的宏展開,生成 configure 腳本。這個過程可能要用到aclocal.m4中定義的宏。

[root@localhost auto_make_test]# autoconf [root@localhost auto_make_test]# ll total 196 -rw-r--r-- 1 root root ?37794 Jan ?5 17:43 aclocal.m4 drwxr-xr-x 2 root root ? 4096 Jan ?5 17:43 autom4te.cache -rw-r--r-- 1 root root ? ? ?0 Jan ?5 17:42 autoscan.log -rw-r--r-- 1 root root ? ? 81 Jan ?5 17:01 auto_test.c -rwxr-xr-x 1 root root 141850 Jan ?5 17:43 configure -rw-r--r-- 1 root root ? ?499 Jan ?5 17:38 configure.ac

5.執行autoheader


該命令生成 config.h.in 文件。該命令通常會從 "acconfig.h”文件中復制用戶附加的符號定義。該例子中沒有附加的符號定義, 所以不需要創建 "acconfig.h”文件。

[root@localhost auto_make_test]# autoheader? [root@localhost auto_make_test]# ll total 200 -rw-r--r-- 1 root root ?37794 Jan ?5 17:43 aclocal.m4 drwxr-xr-x 2 root root ? 4096 Jan ?5 17:43 autom4te.cache -rw-r--r-- 1 root root ? ? ?0 Jan ?5 17:42 autoscan.log -rw-r--r-- 1 root root ? ? 81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root ? ?625 Jan ?5 17:43 config.h.in -rwxr-xr-x 1 root root 141850 Jan ?5 17:43 configure -rw-r--r-- 1 root root ? ?499 Jan ?5 17:38 configure.ac

6、創建Makefile.am文件:


Automake工具會根據 configure.in 中的參量把 Makefile.am 轉換成 Makefile.in 文件。最終通過Makefile.in生成Makefile文件,所以Makefile.am這個文件非常重要,定義了一些生成Makefile的規則。

[root@localhost auto_make_test]# vim Makefile.am [root@localhost auto_make_test]# cat Makefile.am? AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=auto_test auto_test_SOURCES=auto_test.c

1). AUTOMAKE_OPTIONS:由于GNU對自己發布的軟件有嚴格的規范, 比如必須附帶許可證聲明文件COPYING等,否則automake執行時會報錯. automake提供了3中軟件等級:foreign, gnu和gnits, 供用戶選擇。默認級別是gnu。在本例中,使用了foreign等級, 它只檢測必須的文件。
2). bin_PROGRAMS = auto_test:生成的可執行文件名稱,生成多個可執行文件,可以用空格隔開。
3). auto_test_SOURCES:生成可執行文件auto_test需要依賴的源文件。其中auto_test_為可執行文件的名稱。


7、執行automake

執行automake --add-missing命令。該命令生成 Makefile.in 文件。使用選項 "--add-missing" 可以讓Automake自動添加一些必需的腳本文件。如果發現一些文件不存在,可以通過手工 touch命令創建。

[root@localhost auto_make_test]# ll total 204 -rw-r--r-- 1 root root ?37794 Jan 15 15:30 aclocal.m4 drwxr-xr-x 2 root root ? 4096 Jan 15 15:30 autom4te.cache -rw-r--r-- 1 root root ? ? ?0 Jan 15 15:29 autoscan.log -rw-r--r-- 1 root root ? ? 81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root ? ?625 Jan 15 15:31 config.h.in -rwxr-xr-x 1 root root 141850 Jan 15 15:30 configure -rw-r--r-- 1 root root ? ?499 Jan ?5 17:38 configure.ac -rw-r--r-- 1 root root ? ? 78 Jan ?5 17:45 Makefile.am [root@localhost auto_make_test]# automake --add-missing configure.ac:8: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. ?For more info, see: configure.ac:8: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation configure.ac:8: installing './install-sh' configure.ac:8: installing './missing' Makefile.am: installing './depcomp' [root@localhost auto_make_test]# ll total 228 -rw-r--r-- 1 root root ?37794 Jan 15 15:30 aclocal.m4 drwxr-xr-x 2 root root ? 4096 Jan 15 15:32 autom4te.cache -rw-r--r-- 1 root root ? ? ?0 Jan 15 15:29 autoscan.log -rw-r--r-- 1 root root ? ? 81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root ? ?625 Jan 15 15:31 config.h.in -rwxr-xr-x 1 root root 141850 Jan 15 15:30 configure -rw-r--r-- 1 root root ? ?499 Jan ?5 17:38 configure.ac lrwxrwxrwx 1 root root ? ? 32 Jan 15 15:32 depcomp -> /usr/share/automake-1.13/depcomp lrwxrwxrwx 1 root root ? ? 35 Jan 15 15:32 install-sh -> /usr/share/automake-1.13/install-sh -rw-r--r-- 1 root root ? ? 78 Jan ?5 17:45 Makefile.am -rw-r--r-- 1 root root ?23321 Jan 15 15:32 Makefile.in lrwxrwxrwx 1 root root ? ? 32 Jan 15 15:32 missing -> /usr/share/automake-1.13/missing [root@localhost auto_make_test]#?

8、執行configure:


執行configure生成Makefile文件,便可以運行make生成可執行文件了。

[root@localhost auto_make_test]# ./configure? checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk -rw-r--r-- 1 root root ? ?625 Jan 15 15:31 config.h.in -rw-r--r-- 1 root root ? 8546 Jan 15 15:34 config.log -rwxr-xr-x 1 root root ?32482 Jan 15 15:34 config.status -rwxr-xr-x 1 root root 141850 Jan 15 15:30 configure -rw-r--r-- 1 root root ? ?499 Jan ?5 17:38 configure.ac lrwxrwxrwx 1 root root ? ? 32 Jan 15 15:32 depcomp -> /usr/share/automake-1.13/depcomp lrwxrwxrwx 1 root root ? ? 35 Jan 15 15:32 install-sh -> /usr/share/automake-1.13/install-sh -rw-r--r-- 1 root root ?23092 Jan 15 15:34 Makefile -rw-r--r-- 1 root root ? ? 78 Jan ?5 17:45 Makefile.am -rw-r--r-- 1 root root ?23321 Jan 15 15:32 Makefile.in lrwxrwxrwx 1 root root ? ? 32 Jan 15 15:32 missing -> /usr/share/automake-1.13/missing -rw-r--r-- 1 root root ? ? 23 Jan 15 15:34 stamp-h1 [root@localhost auto_make_test]# make make all-am make[1]: Entering directory `/home/mycode/auto_make_test' gcc -DHAVE_CONFIG_H -I. -g -O2 -MT auto_test.o -MD -MP -MF .deps/auto_test.Tpo -c -o auto_test.o auto_test.c mv -f .deps/auto_test.Tpo .deps/auto_test.Po gcc -g -O2 -o auto_test auto_test.o make[1]: Leaving directory `/home/mycode/auto_make_test' [root@localhost auto_make_test]# ll total 324 -rw-r--r-- 1 root root 37794 Jan 15 15:30 aclocal.m4 drwxr-xr-x 2 root root 4096 Jan 15 15:32 autom4te.cache -rw-r--r-- 1 root root 0 Jan 15 15:29 autoscan.log -rwxr-xr-x 1 root root 11048 Jan 15 15:34 auto_test -rw-r--r-- 1 root root 81 Jan 5 17:01 auto_test.c -rw-r--r-- 1 root root 5984 Jan 15 15:34 auto_test.o -rw-r--r-- 1 root root 778 Jan 15 15:34 config.h -rw-r--r-- 1 root root 625 Jan 15 15:31 config.h.in -rw-r--r-- 1 root root 8546 Jan 15 15:34 config.log -rwxr-xr-x 1 root root 32482 Jan 15 15:34 config.status -rwxr-xr-x 1 root root 141850 Jan 15 15:30 configure -rw-r--r-- 1 root root 499 Jan 5 17:38 configure.ac lrwxrwxrwx 1 root root 32 Jan 15 15:32 depcomp -> /usr/share/automake-1.13/depcomp lrwxrwxrwx 1 root root 35 Jan 15 15:32 install-sh -> /usr/share/automake-1.13/install-sh -rw-r--r-- 1 root root 23092 Jan 15 15:34 Makefile -rw-r--r-- 1 root root 78 Jan 5 17:45 Makefile.am -rw-r--r-- 1 root root 23321 Jan 15 15:32 Makefile.in lrwxrwxrwx 1 root root 32 Jan 15 15:32 missing -> /usr/share/automake-1.13/missing -rw-r--r-- 1 root root 23 Jan 15 15:34 stamp-h1 [root@localhost auto_make_test]# ./auto_test auto make test [root@localhost auto_make_test]#

此外還可以執行make的其他操作比如打包、install、uninstall等:
?

[root@localhost auto_make_test]# make dist make ?dist-gzip am__post_remove_distdir='@:' make[1]: Entering directory `/home/mycode/auto_make_test' if test -d "auto_test-1.0"; then find "auto_test-1.0" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "auto_test-1.0" || { sleep 5 && rm -rf "auto_test-1.0"; }; else :; fi test -d "auto_test-1.0" || mkdir "auto_test-1.0" test -n "" \ || find "auto_test-1.0" -type d ! -perm -755 \-exec chmod u+rwx,go+rx {} \; -o \! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \! -type d ! -perm -400 -exec chmod a+r {} \; -o \! -type d ! -perm -444 -exec /bin/sh /home/mycode/auto_make_test/install-sh -c -m a+r {} {} \; \ || chmod -R a+r "auto_test-1.0" tardir=auto_test-1.0 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >auto_test-1.0.tar.gz make[1]: Leaving directory `/home/mycode/auto_make_test' if test -d "auto_test-1.0"; then find "auto_test-1.0" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "auto_test-1.0" || { sleep 5 && rm -rf "auto_test-1.0"; }; else :; fi [root@localhost auto_make_test]# ll total 400 -rw-r--r-- 1 root root ?37794 Jan 15 15:30 aclocal.m4 drwxr-xr-x 2 root root ? 4096 Jan 15 15:32 autom4te.cache -rw-r--r-- 1 root root ? ? ?0 Jan 15 15:29 autoscan.log -rwxr-xr-x 1 root root ?11048 Jan 15 15:34 auto_test -rw-r--r-- 1 root root ?71596 Jan 15 15:37 auto_test-1.0.tar.gz -rw-r--r-- 1 root root ? ? 81 Jan ?5 17:01 auto_test.c -rw-r--r-- 1 root root ? 5984 Jan 15 15:34 auto_test.o -rw-r--r-- 1 root root ? ?778 Jan 15 15:34 config.h -rw-r--r-- 1 root root ? ?625 Jan 15 15:31 config.h.in -rw-r--r-- 1 root root ? 8546 Jan 15 15:34 config.log -rwxr-xr-x 1 root root ?32482 Jan 15 15:34 config.status

?

autogen.sh實例

之前介紹的automake貌似工序過于復雜,在這里其實是沒有必要做這么復雜的工作的,完全可以將其抽象成一個模板性質的腳本將各個工序都集中到腳本里面,使用者只需要稍微修改自己的配置文件即可,直白點就是使用autogen.sh,相信這個腳本在很多的開源代碼甚至網上的帖子討論中都已經泛濫了。在此也使用這個腳本,然后再代碼中只需要補充上configure.ac和Makefile.am文件即可。具體流程如下所示:

1.準備文件

[root@localhost ~]# mkdir autogen_test [root@localhost ~]# cd autogen_test/ [root@localhost autogen_test]# mkdir src? [root@localhost autogen_test]# cd src/


測試代碼:

[root@localhost src]# vim auto_test.c [root@localhost src]# cat auto_test.c #include <stdio.h>int main() {printf("auto make test\n");return 0; }


編寫源碼的Makefile.am

[root@localhost src]# vim Makefile.am [root@localhost src]# cat Makefile.am? bin_PROGRAMS=auto_test auto_test_SOURCES=auto_test.c auto_test_LDADD= LIBS=-lm INCLUDES=-I/usr/include


?編寫外層目錄Makefile.am

[root@localhost src]# cd .. [root@localhost autogen_test]# vim Makefile.am? [root@localhost autogen_test]# cat Makefile.am? SUBDIRS = src.PHONY: auto_cleanauto_clean: distcleanfind . -name Makefile.in -exec rm -f {} \;rm -rf autom4te.cacherm -f missing aclocal.m4 config.h.in config.guess config.sub ltmain.sh install-sh configure depcomp compile


?編寫autogen.sh文件:

[root@localhost autogen_test]# vim autogen.sh? [root@localhost autogen_test]# cat autogen.sh? #!/bin/shecho echo ... auto_test autogen ... echo## Check all dependencies are present MISSING=""# Check for aclocal env aclocal --version > /dev/null 2>&1 if [ $? -eq 0 ]; thenACLOCAL=aclocal elseMISSING="$MISSING aclocal" fi# Check for autoconf env autoconf --version > /dev/null 2>&1 if [ $? -eq 0 ]; thenAUTOCONF=autoconf elseMISSING="$MISSING autoconf" fi# Check for autoheader env autoheader --version > /dev/null 2>&1 if [ $? -eq 0 ]; thenAUTOHEADER=autoheader elseMISSING="$MISSING autoheader" fi# Check for automake env automake --version > /dev/null 2>&1 if [ $? -eq 0 ]; thenAUTOMAKE=automake elseMISSING="$MISSING automake" fi# Check for libtoolize or glibtoolize env libtoolize --version > /dev/null 2>&1 if [ $? -eq 0 ]; then# libtoolize was found, so use itTOOL=libtoolize else# libtoolize wasn't found, so check for glibtoolizeenv glibtoolize --version > /dev/null 2>&1if [ $? -eq 0 ]; thenTOOL=glibtoolizeelseMISSING="$MISSING libtoolize/glibtoolize"fi fi# Check for tar env tar -cf /dev/null /dev/null > /dev/null 2>&1 if [ $? -ne 0 ]; thenMISSING="$MISSING tar" fi## If dependencies are missing, warn the user and abort if [ "x$MISSING" != "x" ]; thenecho "Aborting."echoecho "The following build tools are missing:"echofor pkg in $MISSING; doecho " ?* $pkg"doneechoecho "Please install them and try again."echoexit 1 fi## Do the autogeneration echo Running ${ACLOCAL}... $ACLOCAL? echo Running ${AUTOHEADER}... $AUTOHEADER echo Running ${TOOL}... $TOOL --automake --copy --force echo Running ${AUTOCONF}... $AUTOCONF echo Running ${AUTOMAKE}... $AUTOMAKE --add-missing --force-missing --copy --foreign# Run autogen in the argp-standalone sub-directory #echo "Running autogen.sh in argp-standalone ..." #( cd contrib/argp-standalone;./autogen.sh )# Instruct user on next steps echo echo "Please proceed with configuring, compiling, and installing."


編寫configure.ac文件

[root@localhost autogen_test]# vim configure.ac? [root@localhost autogen_test]# cat configure.ac? # ? ? ? ? ? ? ? ? ? ? -*- Autoconf -*- # Process this file with autoconf to produce a configure script.AC_PREREQ([2.69]) AC_INIT([auto_test],[1.0],[751772517@qq.com])AC_SUBST([PACKAGE_RELEASE],[1.0],[751772517@qq.com])AM_INIT_AUTOMAKE(auto_test,1.0) AC_CONFIG_SRCDIR([src/auto_test.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefilesrc/Makefile])# Checks for programs. AC_PROG_CC AC_PROG_LIBTOOL# Checks for libraries.# Checks for header files. AC_CHECK_HEADERS([stddef.h string.h])# Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T# Checks for library functions. AC_FUNC_REALLOC AC_CHECK_FUNCS([memset socket])AC_OUTPUT


文件結構:

[root@localhost autogen_test]# tree . |-- autogen.sh |-- configure.ac |-- Makefile.am `-- src|-- auto_test.c`-- Makefile.am1 directory, 5 files [root@localhost autogen_test]#

截止到這里所有的文件都已經創建好了,也就是說前期的準備就可以了,后續只需要運行腳本就可以生成Makefile文件了

2.生成Makefile

[root@localhost autogen_test]# ./autogen.sh?... auto_test autogen ...Running aclocal... Running autoheader... Running libtoolize... Running autoconf... Running automake... configure.ac:9: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. ?For more info, see: configure.ac:9: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation configure.ac:17: installing './config.guess' configure.ac:17: installing './config.sub' configure.ac:9: installing './install-sh' configure.ac:9: installing './missing' src/Makefile.am:5: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') src/Makefile.am: installing './depcomp'Please proceed with configuring, compiling, and installing.


查看文件:

[root@localhost autogen_test]# ll total 1224 -rw-r--r-- 1 root root 346593 Jan 19 10:47 aclocal.m4 -rwxr-xr-x 1 root root ? 1986 Jan 18 15:22 autogen.sh drwxr-xr-x 2 root root ? 4096 Jan 19 10:47 autom4te.cache -rwxr-xr-x 1 root root ?45297 Jan 19 10:47 config.guess -rw-r--r-- 1 root root ? 2278 Jan 19 10:47 config.h.in -rwxr-xr-x 1 root root ?35533 Jan 19 10:47 config.sub -rwxr-xr-x 1 root root 415594 Jan 19 10:47 configure -rwxr-xr-x 1 root root ? ?708 Jan 18 16:03 configure.ac -rwxr-xr-x 1 root root ?23566 Jan 19 10:47 depcomp -rwxr-xr-x 1 root root ?13997 Jan 19 10:47 install-sh -rw-r--r-- 1 root root 283474 Jan 19 10:47 ltmain.sh -rw-r--r-- 1 root root ? ?229 Jan 19 10:45 Makefile.am -rw-r--r-- 1 root root ?24704 Jan 19 10:47 Makefile.in -rwxr-xr-x 1 root root ? 6873 Jan 19 10:47 missing drwxr-xr-x 2 root root ? 4096 Jan 19 10:47 src


?執行configure

[root@localhost autogen_test]# ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables...? checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking how to print strings... printf checking for a sed that does not truncate output... /usr/bin/sed checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for fgrep... /usr/bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... yes checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for mt... no checking if : is a manifest tool... no checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... no checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for string.h... (cached) yes checking for stdbool.h that conforms to C99... yes checking for _Bool... yes checking for size_t... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible realloc... yes checking for memset... yes checking for socket... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands


?查看生成的文件

[root@localhost autogen_test]# ll total 1644 -rw-r--r-- 1 root root 346593 Jan 19 10:47 aclocal.m4 -rwxr-xr-x 1 root root ? 1986 Jan 18 15:22 autogen.sh drwxr-xr-x 2 root root ? 4096 Jan 19 10:47 autom4te.cache -rwxr-xr-x 1 root root ?45297 Jan 19 10:47 config.guess -rw-r--r-- 1 root root ? 2504 Jan 19 10:48 config.h -rw-r--r-- 1 root root ? 2278 Jan 19 10:47 config.h.in -rw-r--r-- 1 root root ?25756 Jan 19 10:48 config.log -rwxr-xr-x 1 root root ?61429 Jan 19 10:48 config.status -rwxr-xr-x 1 root root ?35533 Jan 19 10:47 config.sub -rwxr-xr-x 1 root root 415594 Jan 19 10:47 configure -rwxr-xr-x 1 root root ? ?708 Jan 18 16:03 configure.ac -rwxr-xr-x 1 root root ?23566 Jan 19 10:47 depcomp -rwxr-xr-x 1 root root ?13997 Jan 19 10:47 install-sh -rwxr-xr-x 1 root root 292999 Jan 19 10:48 libtool -rw-r--r-- 1 root root 283474 Jan 19 10:47 ltmain.sh -rw-r--r-- 1 root root ?24843 Jan 19 10:48 Makefile -rw-r--r-- 1 root root ? ?229 Jan 19 10:45 Makefile.am -rw-r--r-- 1 root root ?24704 Jan 19 10:47 Makefile.in -rwxr-xr-x 1 root root ? 6873 Jan 19 10:47 missing drwxr-xr-x 3 root root ? 4096 Jan 19 10:48 src -rw-r--r-- 1 root root ? ? 23 Jan 19 10:48 stamp-h1 [root@localhost autogen_test]#?


到這里就生成了Makefile文件,所有的都是直接運行腳本自動生成的。

3.編譯 測試

?

[root@localhost autogen_test]# make? make ?all-recursive make[1]: Entering directory `/home/mycode/autogen_test' Making all in src make[2]: Entering directory `/home/mycode/autogen_test/src' gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include ? ?-g -O2 -MT auto_test.o -MD -MP -MF .deps/auto_test.Tpo -c -o auto_test.o auto_test.c mv -f .deps/auto_test.Tpo .deps/auto_test.Po /bin/sh ../libtool ?--tag=CC ? --mode=link gcc ?-g -O2 ? -o auto_test auto_test.o ?-lm libtool: link: gcc -g -O2 -o auto_test auto_test.o ?-lm make[2]: Leaving directory `/home/mycode/autogen_test/src' make[2]: Entering directory `/home/mycode/autogen_test' make[2]: Leaving directory `/home/mycode/autogen_test' make[1]: Leaving directory `/home/mycode/autogen_test'


查看生成的可執行文件:

[root@localhost autogen_test]# ll src/ total 68 -rwxr-xr-x 1 root root 11048 Jan 19 10:49 auto_test -rw-r--r-- 1 root root ? ?81 Jan 18 15:11 auto_test.c -rw-r--r-- 1 root root ?5992 Jan 19 10:49 auto_test.o -rw-r--r-- 1 root root 18522 Jan 19 10:48 Makefile -rw-r--r-- 1 root root ? 103 Jan 18 15:16 Makefile.am -rw-r--r-- 1 root root 18875 Jan 19 10:47 Makefile.in


?執行可執行程序:

[root@localhost autogen_test]# ./src/auto_test? auto make test 執行make auto_clean[root@localhost autogen_test]# make auto_clean Making distclean in src make[1]: Entering directory `/home/mycode/autogen_test/src'rm -f auto_test rm -rf .libs _libs rm -f *.o rm -f *.lo rm -f *.tab.c test -z "" || rm -f? test . = "." || test -z "" || rm -f? rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf ./.deps rm -f Makefile make[1]: Leaving directory `/home/mycode/autogen_test/src' make[1]: Entering directory `/home/mycode/autogen_test' rm -rf .libs _libs rm -f *.lo test -z "" || rm -f? test . = "." || test -z "" || rm -f? rm -f config.h stamp-h1 rm -f libtool config.lt rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -f cscope.out cscope.in.out cscope.po.out cscope.files make[1]: Leaving directory `/home/mycode/autogen_test' rm -f config.status config.cache config.log configure.lineno config.status.lineno rm -f Makefile find . -name Makefile.in -exec rm -f {} \; rm -rf autom4te.cache rm -f missing aclocal.m4 config.h.in config.guess config.sub ltmain.sh install-sh configure depcomp compile


?查看清理完畢后的文件:

[root@localhost autogen_test]# tree . |-- autogen.sh |-- configure.ac |-- Makefile.am `-- src|-- auto_test.c`-- Makefile.am1 directory, 5 files [root@localhost autogen_test]#?


測試成功,makefi文件可以正常使用,這里就可以將其抽象成一個模板性質的東西,也就是說以后要用的時候只需要修改配置文件configure.ac以及src/Makefile.am即可,自己的代碼可以任意的填充,當然多目錄的也是如此只需要增加相應的目錄以及對于的Makefile.am文件即可,在根目錄下的Makefile.am把目錄名填寫進去就可以自動執行腳本掃描目錄生成Makefile文件進行編譯了,這種用法相對于前文來說工序是一樣的只不過是將單個的命令封裝到腳本里面了,這樣用起來就方便多了。


————————————————
版權聲明:本文為CSDN博主「kongslly」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kongshuai19900505/article/details/79104442

總結

以上是生活随笔為你收集整理的autotools 自动编译系列简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日本精品在线视频 | 中文字幕国内精品 | 中文av网 | 中文字幕免费不卡视频 | 日韩性xxxx| 91精品国产乱码久久桃 | 欧美日韩另类在线观看 | 综合网成人 | 九七视频在线观看 | 午夜国产一区 | 在线国产视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 91精品欧美一区二区三区 | 国产一区二三区好的 | 一区三区视频 | 日韩专区在线观看 | 91在线播放国产 | 欧美亚洲国产一卡 | 国产字幕av| 又湿又紧又大又爽a视频国产 | 久久精品视频国产 | 国产一区二区三区午夜 | 欧美少妇xx| 欧美精品国产综合久久 | 中文 一区二区 | 国内精品久久久久影院优 | 黄色成人91| 日本久久电影网 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 玖玖爱在线观看 | 国产日韩亚洲 | 色视频一区 | 国产97色在线 | 久草在线视频在线观看 | 欧美91精品久久久久国产性生爱 | 日韩精品视频在线观看免费 | 波多野结衣视频一区 | 一区二区三区精品久久久 | 精品国产乱码久久久久久1区二区 | 久久久久影视 | 久久人人爽人人 | 国产在线欧美日韩 | 国内视频一区二区 | 91免费网站在线观看 | 国产一区影院 | 天天躁日日 | 成人av在线电影 | 国产精品9999久久久久仙踪林 | 91精品秘密在线观看 | 婷婷丁香六月天 | 国产在线2020| 天天操夜夜逼 | 亚洲最大av在线播放 | 丁香婷五月 | 在线日本v二区不卡 | av电影亚洲 | 伊人天天色 | 日本午夜在线观看 | 亚洲第一区精品 | 在线观看视频你懂 | 欧美9999| av免费在线网站 | 日本黄色免费观看 | 久久精品九色 | 久久激情日本aⅴ | 日韩激情视频在线观看 | 天天操操操操操 | 亚洲 中文字幕av | 97视频在线观看网址 | av不卡在线看 | 中文字幕成人在线 | 亚洲在线资源 | 日韩欧美国产精品 | 国产精品久久久久久电影 | 久草在线费播放视频 | 国产一区二区高清 | 亚洲欧美国产精品va在线观看 | 久久精品视 | 国色天香永久免费 | 99久热精品| 最近免费中文字幕 | 天天操天天射天天添 | 人人爱天天操 | 一区二区三区高清 | 欧美日韩一级久久久久久免费看 | 亚洲成人免费在线观看 | 中文字幕在线一区观看 | 麻豆91小视频 | av片在线观看 | 九九热精品视频在线观看 | 三级a视频| 久久这里精品视频 | 俺要去色综合狠狠 | 国产精品永久在线观看 | 国产高清中文字幕 | 99热最新在线 | 97精品一区 | 日韩免费网址 | 亚洲精品美女在线观看播放 | 一级黄色av | 黄色av电影一级片 | 国产超碰在线 | 亚洲精品看片 | 亚洲天天做 | 九月婷婷人人澡人人添人人爽 | 人人澡av| 九九热在线观看 | 午夜视频欧美 | www.com黄色| 成人精品影视 | 成人免费共享视频 | 最近日韩免费视频 | 97成人精品 | 69xxxx欧美| 久久久久久国产一区二区三区 | 99这里只有精品99 | 欧美精品国产精品 | 在线视频一区二区 | 丁香花在线视频观看免费 | 天天干天天做 | 亚洲精品中文字幕在线观看 | 国产区高清在线 | 日韩高清一区 | 日韩偷拍精品 | 97国产精品久久 | 热久久国产 | 国产精品久久一区二区三区不卡 | 日本丶国产丶欧美色综合 | 免费视频区 | 国产97在线视频 | 天天躁日日躁狠狠躁av麻豆 | 久草网在线观看 | 欧美另类交人妖 | 中文字幕在线观看不卡 | 一区中文字幕在线观看 | 久久久免费精品国产一区二区 | 免费观看国产精品 | 欧洲精品码一区二区三区免费看 | 免费av免费观看 | 免费激情在线电影 | 成人精品福利 | 日韩免费电影一区二区三区 | 97网在线观看 | 丝袜精品视频 | 久久99国产精品久久99 | 黄色av免费电影 | 日韩av高清在线观看 | 久久久久在线 | 免费看av片网站 | 超碰在线最新网址 | 中文视频在线看 | 日韩一级黄色大片 | av电影中文 | 日韩二区在线观看 | 色偷偷人人澡久久超碰69 | 91香蕉视频污在线 | 9在线观看免费高清完整 | 网址你懂的在线观看 | 99麻豆视频| 日韩精品一区二区在线观看 | 丁香花在线观看免费完整版视频 | 又黄又爽又色无遮挡免费 | www狠狠| 国产精品99久久久久久久久 | 狠狠的操| 国产特级毛片aaaaaa毛片 | 在线亚州 | 日韩av视屏在线观看 | 成人午夜黄色 | 亚洲码国产日韩欧美高潮在线播放 | 亚洲精品久久久久久中文传媒 | 欧美激情精品久久久久 | 国产精品麻 | 日韩艹 | 色91在线 | 亚洲最大的av网站 | 99精品国产在热久久下载 | 久久天天躁夜夜躁狠狠躁2022 | 亚洲在线网址 | 在线看片中文字幕 | 欧美在线不卡一区 | 在线精品亚洲一区二区 | 青青河边草观看完整版高清 | 国产精品久久久久久久久婷婷 | 九九热精品视频在线播放 | 日韩伦理一区二区三区av在线 | 免费日韩三级 | 亚洲一级黄色av | 99视频+国产日韩欧美 | 狠狠躁夜夜躁人人爽超碰91 | 国产精品成久久久久 | 成人免费视频网站在线观看 | 久久毛片网站 | 久久久久久久网站 | 久久99在线观看 | 国产精品一区二区在线观看免费 | 成人在线电影观看 | www.久久免费| 欧美精品乱码久久久久 | 久久久三级视频 | 一区二区日韩av | 丁香视频五月 | 亚洲一区二区视频 | 日韩特黄一级欧美毛片特黄 | www.久久爱.cn | 91九色视频观看 | 婷婷久久国产 | 亚洲精品资源在线观看 | 精品亚洲午夜久久久久91 | 日本在线观看一区二区 | 日韩高清三区 | 欧美无极色 | 中文字幕a在线 | 久久久久亚洲精品国产 | 亚洲一区日韩在线 | 久久久久久久久久久综合 | 亚洲精品午夜久久久久久久 | 一区二区不卡视频在线观看 | 日日躁你夜夜躁你av蜜 | 国产最新在线视频 | 婷婷丁香国产 | 成人免费视频在线观看 | 日韩激情第一页 | 国产在线观看高清视频 | 最新日韩在线 | 久久人人爽人人人人片 | 亚洲欧美综合 | 综合网五月天 | www视频在线免费观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 特级黄录像视频 | 免费h在线观看 | 久久久久高清毛片一级 | 欧美男男激情videos | 在线看岛国av | 最近中文字幕免费观看 | 精精国产xxxx视频在线播放 | 中文在线www | 日韩av午夜 | 99r在线观看 | 欧美激情综合色综合啪啪五月 | 成人午夜精品久久久久久久3d | 欧美国产不卡 | 美女视频免费一区二区 | 麻豆视频在线观看免费 | 看国产黄色片 | 97在线观| 欧美性色综合网站 | 婷婷中文字幕在线观看 | 久久久久久久久福利 | 天堂av官网 | 亚洲第一香蕉视频 | 在线观看视频国产 | 日韩视频中文 | 色搞搞| 97国产在线 | 超碰97人 | 黄色小说免费观看 | 中文永久免费观看 | 日韩系列在线 | 日韩精品大片 | 国产精品av免费在线观看 | 日韩大片在线免费观看 | 欧美a视频在线观看 | 米奇狠狠狠888 | 亚洲乱亚洲乱亚洲 | 九九九电影免费看 | 国产精品一区二区免费视频 | 国产精品乱码久久 | 午夜av片 | 中文一二区 | 久草免费新视频 | 国产日韩精品在线观看 | 久久久久色 | 天天射天天射天天 | 97精品国产一二三产区 | 五月天久久狠狠 | 久久综合影视 | 国产精品免费久久久久 | 日日摸日日碰 | 国产亚洲情侣一区二区无 | 成人精品国产免费网站 | 免费av在线网站 | 日韩欧美视频一区二区 | 天堂网中文在线 | 精品久久久久久久久久久院品网 | 国产一区二区三区网站 | a视频免费 | 日韩乱码中文字幕 | 区一区二区三区中文字幕 | 欧美日韩二三区 | 丁香视频全集免费观看 | 黄色一二级片 | 婷婷五天天在线视频 | 欧美日韩国产色综合一二三四 | 免费在线色视频 | 欧美精品v国产精品 | 国产91在线播放 | 一二区精品 | 日韩激情中文字幕 | 精品国产一区二区三区久久久蜜臀 | 天天操夜夜干 | 操操操日日日干干干 | 日韩av影片在线观看 | 欧美精品一区二区在线观看 | 91视频在线免费看 | 色五月成人 | 男女拍拍免费视频 | 精品99在线 | 美女视频网 | 亚洲免费不卡 | 91视频免费国产 | 欧美一级激情 | 亚洲 欧美 日韩 综合 | 中文免费| 国产录像在线观看 | 成人av视屏 | 日韩电影中文 | 久久视频一区 | 国产综合91| 成年人视频在线免费观看 | 国产精品永久免费观看 | 中文字幕 国产专区 | 一级片色播影院 | 九九影视理伦片 | 日韩精品一区二区三区中文字幕 | 91精品国产综合久久久久久久 | 麻豆视频在线免费 | 草久在线视频 | 丁香视频| 国产一区国产二区在线观看 | a久久免费视频 | 手机在线黄色网址 | 亚洲国产美女精品久久久久∴ | 国产一区二区手机在线观看 | 国产精品女同一区二区三区久久夜 | 久久精品99久久久久久2456 | 国产美腿白丝袜足在线av | 99热精品国产一区二区在线观看 | 日韩v在线91成人自拍 | 免费男女羞羞的视频网站中文字幕 | 午夜国产在线 | 国产亚洲精品久久久久久大师 | 在线观看中文字幕dvd播放 | 久久综合九色综合97_ 久久久 | 免费一级特黄毛大片 | 九九热精| 草久中文字幕 | 成人午夜免费福利 | 国内精品视频免费 | 狠狠操天天干 | 美女亚洲精品 | 99久久久久久国产精品 | 国产一级电影在线 | 99久e精品热线免费 99国产精品久久久久久久久久 | 国产在线观看中文字幕 | 欧美大片大全 | 国产精选在线 | 欧美日韩中文视频 | 在线观看国产日韩 | 国内久久视频 | 99精品成人 | av电影中文字幕在线观看 | 欧美成人一区二区 | 亚洲精品黄网站 | 91成人精品一区在线播放 | 综合激情伊人 | 国产精品理论片在线观看 | 免费日韩视频 | 久久精品视频播放 | 中文字幕在线观看三区 | 久久天堂影院 | 在线国产精品视频 | 天天躁天天操 | 日本一区二区高清不卡 | 久久午夜电影网 | 亚洲一级片在线看 | 久久精品高清视频 | 国模吧一区 | 青草视频在线播放 | 亚洲成人精品在线观看 | 久久爱影视i| 亚洲一区免费在线 | 色成人亚洲 | 亚洲作爱视频 | www.久久色 | 99视频久久 | 成人91视频 | 久久久麻豆精品一区二区 | 色综合久久久久综合99 | av在线免费网站 | 日本中文字幕一二区观 | 中文字幕中文字幕在线一区 | 久草网视频在线观看 | 午夜精品久久久久久久99水蜜桃 | 国产a级片免费观看 | 日日夜夜艹 | 亚洲黄色三级 | 玖玖国产精品视频 | 美女精品| 一区二区三区在线观看 | www.久久色| av电影中文字幕 | 青青河边草免费观看完整版高清 | 国产无套精品久久久久久 | 欧美一性一交一乱 | 日韩精品免费 | 亚洲人在线视频 | 亚洲成人精品久久 | 国产成人精品一区二区三区免费 | 国产网站av | 91看片在线免费观看 | 久久兔费看a级 | 波多野结衣理论片 | 青草草在线 | 视频高清 | 婷婷九九| 九九免费观看视频 | 成片免费观看视频 | 成人91在线观看 | 伊人伊成久久人综合网小说 | 国产精品免费观看网站 | 在线观看av的网站 | 奇米影音四色 | 久久永久免费视频 | 欧美坐爱视频 | 日韩综合精品 | 人人澡人摸人人添学生av | 97热在线观看| 久久一视频 | 国产视频一二区 | 国产伦理一区二区三区 | 91夜夜夜 | 精品电影一区 | 午夜视频黄| 天天se天天cao天天干 | 色婷在线 | 日韩精品中文字幕在线观看 | 午夜精品久久久久久99热明星 | 国产精彩视频一区 | 色婷婷影视 | 18久久久久 | 成人一级免费视频 | 亚洲最新av网址 | 97超碰人人澡人人爱学生 | 久久夜色网 | 二区中文字幕 | 久久av免费电影 | 成人欧美在线 | 97在线观看免费观看 | 国产一级不卡视频 | 欧美三人交| 处女av在线 | 国产精品亚洲精品 | www99精品 | 国产成人精品a | 国产综合在线观看视频 | 国产麻豆精品久久 | 国产精品视频999 | 久久不见久久见免费影院 | 婷婷丁香激情 | 久久99精品久久久久久清纯直播 | 国内外成人免费在线视频 | 国产精品手机看片 | 色com | 一区二区不卡 | 欧美在线不卡一区 | 岛国片在线 | 日韩中文字幕网站 | 在线观看免费视频你懂的 | 美女福利视频网 | 亚洲精品ww | 超碰在线97免费 | 91精品久久久久久久久 | 精品国产片| 成人av电影网址 | 日日天天 | 精品999 | 人人爽人人澡人人添人人人人 | 亚洲dvd | 国产污视频在线观看 | 三级视频国产 | 免费人成网 | 91尤物在线播放 | 九九视频网站 | 免费网站看av片 | 国产一级视频在线免费观看 | 女人高潮特级毛片 | 97成人精品视频在线播放 | 欧美激情视频一二三区 | 日韩精品一区在线播放 | 久久开心激情 | 毛片网在线 | 操操操天天操 | 97超碰超碰久久福利超碰 | 天无日天天操天天干 | 亚洲专区一二三 | 超碰在线日韩 | av成人黄色 | 国产中文字幕国产 | 成人精品福利 | 欧美性免费 | 一区 二区电影免费在线观看 | 91成年人视频 | 99久久久国产精品免费99 | 超碰97中文 | 国产精品五月天 | 色偷偷88888欧美精品久久久 | 国产一二三在线视频 | 婷婷天天色| 黄色av电影在线 | 国产又粗又猛又黄又爽视频 | 狠狠狠干 | 国产网站av | 国产中出在线观看 | 91高清不卡 | 亚洲国产视频网站 | 97精品国产97久久久久久粉红 | 九九九在线观看 | 婷婷成人在线 | 久久呀| 五月在线视频 | 精品国产乱码久久久久久1区二区 | 九九视频在线播放 | 欧美男同网站 | 久久久久成人免费 | 精品久久久久久亚洲综合网 | 久久黄色美女 | 99精品免费久久久久久久久 | 久久精品在线视频 | 99精品乱码国产在线观看 | 欧美精品成人在线 | 久久线视频| 日韩在线三级 | 国产午夜精品一区二区三区欧美 | 一二三精品视频 | 亚洲成a人片在线观看网站口工 | 手机在线黄色网址 | 嫩草av影院 | 91精品视频在线免费观看 | 亚洲精品免费视频 | 97超碰人人模人人人爽人人爱 | 黄色三级免费看 | www.成人久久 | 九色琪琪久久综合网天天 | www.狠狠插.com| 久久精品站 | 婷婷丁香六月 | 国产一区在线不卡 | 国产伦精品一区二区三区在线 | 成人欧美日韩国产 | 日韩乱码在线 | 国产日产精品一区二区三区四区的观看方式 | 免费a v观看 | 久久久久久久久精 | 精品视频免费久久久看 | 国产精品高潮呻吟久久av无 | 欧美精品亚洲精品 | 中文字幕在线资源 | 亚洲日本黄色 | 久久久久人人 | 亚洲综合日韩在线 | 国产精品第2页 | 国产精品视频在线观看 | 色搞搞 | 狠狠色伊人亚洲综合网站野外 | 狠狠狠色丁香综合久久天下网 | 国产精品99久久久久久小说 | 在线观看视频你懂的 | 国产色视频一区 | 欧美精品一区在线 | 欧美一级看片 | 中文字幕888| 99久久精品免费看国产四区 | 国产成人久久精品77777 | 7777精品伊人久久久大香线蕉 | www.久久久.cum | 久久久久久欧美二区电影网 | 中文字幕精品一区 | 久久成人国产精品免费软件 | 日韩在线观看电影 | 伊人色综合久久天天网 | 丁香五月亚洲综合在线 | 五月天婷婷综合 | 中文字幕 国产视频 | 黄色三级免费 | 国产高清视频在线观看 | 免费看污污视频的网站 | 国产精品1区 | 天天干天天操天天射 | 日本韩国欧美在线观看 | 五月天天av | 日韩久久久久久久久久 | 成人 亚洲 欧美 | 精品国偷自产国产一区 | 99精品欧美一区二区蜜桃免费 | 久久激情婷婷 | 久久人人精 | 久久久久视 | 亚洲一区二区高潮无套美女 | 天天插日日操 | 91在线视频精品 | 色偷偷人人澡久久超碰69 | 在线观看精品视频 | 91久久精品一区二区二区 | 四虎在线观看 | 手机看片99 | 色姑娘综合天天 | 天天干天天综合 | 99c视频在线 | 日韩首页| 国产精品精品国产 | 天天操天天干天天干 | 久久免费视频一区 | 91免费观看视频在线 | 婷婷六月天天 | 五月婷婷综合色拍 | 久久久久久97三级 | 久久久人人人 | 久久久国产影院 | 在线不卡的av| 久草亚洲视频 | 2023av| 成人天堂网 | 91丨九色丨国产在线 | 园产精品久久久久久久7电影 | 国产一级电影网 | 99日韩精品| 久久久久日本精品一区二区三区 | 2019精品手机国产品在线 | 人人爽人人爽人人爽学生一级 | 国产高清视频免费在线观看 | 国内精品久久久久影院日本资源 | 深爱开心激情 | 国产成人免费在线观看 | 国产亚洲婷婷免费 | 国内成人av | 精品一区二区免费视频 | 在线观看av中文字幕 | 在线免费视频a | 最近2019中文免费高清视频观看www99 | 久久综合久久久 | 欧美一区二区在线刺激视频 | 99热最新 | 西西4444www大胆无视频 | 国产成人精品不卡 | 国产成视频在线观看 | adc在线观看 | 天天爱天天草 | 欧美成年性 | 免费黄色a网站 | 狠狠地日| av中文资源在线 | 99久在线精品99re8热视频 | 亚洲成年片 | 久草| 欧美不卡视频在线 | 国产高清一级 | 久草视频在线观 | 国产不卡一 | 狠狠色狠狠色合久久伊人 | 在线国产视频观看 | 91九色蝌蚪在线 | 久久久久久久av | 亚洲狠狠操 | 国产亚洲欧美日韩高清 | 伊人丁香 | 国产亚洲婷婷免费 | 中文字幕韩在线第一页 | 精品在线亚洲视频 | 丁香久久激情 | 中文字幕国产精品一区二区 | 婷婷精品国产一区二区三区日韩 | 99视频免费在线观看 | 99热亚洲精品 | 男女视频91| 国产精品乱码久久久久久1区2区 | 国产只有精品 | 美女黄频 | 婷婷丁香六月天 | 中文字幕在线观看免费 | 亚洲成人国产 | 久久精品三 | 久久公开视频 | 国产日韩欧美在线影视 | 日韩视频免费播放 | 91完整版| 久久大片网站 | 亚洲欧美日韩精品久久久 | 日日夜夜骑 | 91视频免费视频 | 午夜av在线播放 | 五月天婷婷狠狠 | 天堂网一区| 四虎成人精品 | 日韩专区一区二区 | 永久免费毛片 | 人人草在线观看 | 久久这里只有精品首页 | 99久久影视| 最新中文字幕视频 | 91成人区| 国产精品久久久久久婷婷天堂 | 黄色片免费电影 | 免费av网址在线观看 | 久久优| 国色综合 | 免费av福利 | 国产精品久久久久永久免费看 | 国产欧美精品在线观看 | 国产香蕉视频 | 99草视频| 97超碰成人在线 | 日韩久久精品一区二区 | 精品一二三四视频 | 久草视频视频在线播放 | 日本少妇高清做爰视频 | 国产成人久久 | 综合久久久久久久久 | 欧美性大胆 | 91av色| 精品国产一区二区三区在线 | 亚洲一级二级三级 | 五月婷婷导航 | av免费看av | 456免费视频 | 最新中文字幕在线资源 | 久久精品电影院 | 国产精品99久久久久 | 91av亚洲 | 97超碰精品 | zzijzzij日本成熟少妇 | 色综合久久久久久中文网 | 97精品国产97久久久久久春色 | 中文字幕在线久一本久 | 成人丝袜 | 成人福利在线播放 | 在线观看黄a | 91夫妻自拍 | 最新av免费在线 | 五月婷婷六月丁香激情 | 精品在线免费视频 | www.av小说 | 特级a毛片 | 99精品欧美一区二区蜜桃免费 | 午夜美女wwww| 九九热只有这里有精品 | 欧美欧美 | 奇米影视在线99精品 | 99精品免费网 | 亚洲女人av | 亚洲精品成人av在线 | 婷婷久久综合九色综合 | 久久激情影院 | 亚洲成人精品久久 | 日韩欧美不卡 | 国产一区欧美一区 | 九九九热精品 | 中文字幕免费国产精品 | 欧美成人按摩 | 91精品啪啪 | 日韩精品一区二区三区三炮视频 | 国产精品久久久久久久久搜平片 | 91av视频免费在线观看 | 狠狠干狠狠操 | 国产一区高清在线 | 久久久久久久免费看 | 色综合天天天天做夜夜夜夜做 | 超碰在线个人 | 99久久爱| 精品一区二区av | 亚洲免费av在线播放 | av片中文字幕 | 日韩久久久久久久 | 亚洲性xxxx| 欧美一区在线观看视频 | 91超碰在线播放 | 超碰在线最新网址 | 久久免费视频这里只有精品 | 中文字幕精品三区 | 国产视频精品久久 | 伊人va | 国产黑丝一区二区三区 | 在线观看中文字幕一区 | 亚洲欧美国内爽妇网 | 亚洲更新最快 | 国产精品嫩草影院123 | 深爱开心激情 | 欧美精品一区二区在线观看 | 日韩欧美大片免费观看 | 一区二区在线影院 | a级片在线播放 | 国产精品久久久久久妇 | 91免费视频网站在线观看 | 成人在线观看你懂的 | 国产精品久久久久久久午夜 | 成人av电影免费观看 | 一色av | 91人人澡人人爽人人精品 | 日韩激情在线视频 | 亚洲日韩中文字幕在线播放 | 性色av免费在线观看 | 精品一区二区久久久久久久网站 | 久久精品国产精品亚洲 | 国产一级二级三级视频 | 国产99一区二区 | 久久久国产精品成人免费 | 奇米影视四色8888 | 麻豆小视频在线观看 | 99精品在线视频观看 | 丁香色婷 | 美女久久久久久久 | 九九色在线 | 黄av在线| 日韩网站免费观看 | 99热国产在线 | 日日摸日日添夜夜爽97 | 免费男女羞羞的视频网站中文字幕 | 免费久久精品视频 | 九九精品视频在线看 | 五月婷婷伊人网 | 久久精品官网 | 天天爱天天操 | 日韩视频中文 | 亚洲激情 在线 | 成人激情开心网 | 夜夜骑天天操 | 久要激情网 | 涩涩网站免费 | 午夜黄色影院 | 午夜性生活 | 日本美女xx | 免费97视频 | 91亚洲在线| 在线免费观看的av网站 | 成人国产一区二区 | 国产精品免费看 | 国产精品入口麻豆www | 日韩免费一区二区 | 国产精品嫩草69影院 | www.一区二区三区 | 国产视频1| 色诱亚洲精品久久久久久 | 亚洲免费在线看 | 国产精品片| 国产精品久久久久av | 久久人人97超碰精品888 | 国产手机视频在线 | 色妞色视频一区二区三区四区 | 国产精品99爱 | 日韩二区三区 | 欧美日韩视频观看 | 亚洲精品中文在线观看 | 亚洲综合涩| 天天久久夜夜 | 精品久久片 | 中文字幕在线观看你懂的 | 欧美日韩午夜在线 | 日韩午夜av | 综合网在线视频 | 亚洲电影第一页av | 久久成人黄色 | 99中文字幕 | 香蕉日日 | 欧美视频日韩 | 四虎影院在线观看av | 中文字幕 国产视频 | 亚洲国产激情 | 国产在线精品播放 | 在线天堂视频 | 成人一区在线观看 | 日日爽夜夜爽 | 国内精品国产三级国产aⅴ久 | 最近2019好看的中文字幕免费 | 99视频国产精品 | 九九在线免费视频 | 精品伦理一区二区三区 | 国产午夜精品一区二区三区 | 在线久草视频 | 国产精品美女久久久网av | 成年人视频免费在线播放 | 欧美日韩在线观看一区二区 | 久久男女视频 | 黄免费在线观看 | 成人黄色电影在线播放 | 成人午夜影视 | 在线观看免费视频你懂的 | 国产精品一区二区av | 福利视频网址 | 97在线视| 在线亚洲精品 | 911国产| 黄色日本片 | 日本中出在线观看 | 久久久穴 | 日韩高清免费在线 | 精品一区二区三区久久 | 一本一本久久a久久 | 夜色资源网 | 久久九九影视网 | 五月丁色 | 午夜私人影院久久久久 | 欧美成人h版在线观看 | 久久综合在线 | 久久久久久久久久久网站 | 蜜臀久久99精品久久久酒店新书 | 黄色动态图xx | 久久蜜桃av| 国产91精品久久久久久 | 在线观看一级片 | 日韩字幕在线 | 92国产精品久久久久首页 | 久久综合九色欧美综合狠狠 | 在线观看岛国av | 久久黄色免费 | 精品自拍sae8—视频 | 99国产一区 | 欧美贵妇性狂欢 | 国产精品久久久网站 | 国产精品自产拍在线观看网站 | 国产高清99 | 奇米7777狠狠狠琪琪视频 | 精品视频免费看 | 欧美精品久久久久久久久久久 | 69国产成人综合久久精品欧美 | 99在线视频播放 | 中国老女人日b | 亚洲aⅴ乱码精品成人区 | 国产 精品 资源 | 福利一区二区 | 天天艹天天干天天 | 国产成人一区二区三区 | 成人黄色在线观看视频 | 国产一区在线观看视频 | 激情视频在线高清看 | 97精品国产97久久久久久 | 激情视频免费在线 | 99精品乱码国产在线观看 | av三级在线免费观看 | 亚洲三级av | 欧美日韩视频在线一区 | 丁香久久五月 | 久久久精品免费看 | 国产黄色美女 | 欧美色图另类 | 色97在线| 欧美亚洲精品一区 | 国产玖玖视频 | 日本精品久久久一区二区三区 | 精品影院 | 成人av电影免费在线播放 | 九九九热精品免费视频观看网站 | www.超碰 | 日本免费一二三区 | 天天爽天天搞 | 五月婷婷一区二区三区 | 亚洲综合激情 | 成年人免费av | 亚洲婷婷伊人 | 91免费看黄 | 国产99久久精品一区二区永久免费 | 亚洲国产欧美在线人成大黄瓜 | 在线观看精品一区 | 国产日韩精品在线观看 | 国产精品久久久久久久妇 | 亚洲精品1区2区3区 超碰成人网 | 91精品在线看| 日韩手机视频 | 伊人婷婷久久 | 国产最新在线视频 | 久久99精品久久久久久久久久久久 | 91精品国产成 | 在线看91| 久久久免费精品视频 | 国产一级淫片在线观看 | 国产精品 日韩 | 五月在线视频 | www.狠狠操.com | 亚洲影音先锋 | 婷婷视频在线 | 西西444www大胆高清图片 | 色婷婷啪啪免费在线电影观看 | 免费日韩 精品中文字幕视频在线 | 欧美日韩精品影院 | 国产成人一区二区啪在线观看 | 欧美另类v | 久久久久久久久久久久亚洲 | 久久久久免费精品视频 | 91久久精品一区二区二区 | 波多野结衣理论片 | 天天摸天天干天天操天天射 | 国产精品久久久久久久久久久久 | 四虎永久国产精品 | 日本精a在线观看 | 成人一级免费电影 | 奇米影视777影音先锋 | 91成人观看 | 五月婷香蕉久色在线看 |