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

Rust包管理器Cargo入門

開發 后端
Rust 是一種現代編程語言,可提供高性能、可靠性和生產力。除了是一種出色的編程語言之外,Rust 還具有一個稱為 Cargo 的構建系統和軟件包管理器。

[[317853]]

了解 Rust 的軟件包管理器和構建工具。

Rust 是一種現代編程語言,可提供高性能、可靠性和生產力。幾年來,它一直被 StackOverflow 調查評為最受歡迎的語言

除了是一種出色的編程語言之外,Rust 還具有一個稱為 Cargo 的構建系統和軟件包管理器。Cargo 處理許多任務,例如構建代碼、下載庫或依賴項等等。這兩者捆綁在一起,因此在安裝 Rust 時會得到 Cargo。

安裝 Rust 和 Cargo

在開始之前,你需要安裝 Rust 和 Cargo。Rust 項目提供了一個可下載的腳本來處理安裝。要獲取該腳本,請打開瀏覽器以訪問 https://sh.rustup.rs 并保存該文件。閱讀該腳本以確保你對它的具體行為有所了解,然后再運行它:

  1. $ sh ./rustup.rs

你也可以參考這個安裝 Rust 的網頁以獲取更多信息。

安裝 Rust 和 Cargo 之后,你必須獲取source env 文件中的配置:

  1. $ source $HOME/.cargo/env

更好的辦法是,將所需目錄添加到 PATH 環境變量中:

  1. export PATH=$PATH:~/.cargo/bin

如果你更喜歡使用軟件包管理器(例如 Linux 上的 DNF 或 Apt),請在發行版本的存儲庫中查找 Rust 和 Cargo 軟件包,并進行相應的安裝。 例如:

  1. $ dnf install rust cargo

安裝并設置它們后,請驗證你擁有的 Rust 和 Cargo 版本:

  1. $ rustc --version
  2. rustc 1.41.0 (5e1a79984 2020-01-27)
  3. $ cargo --version
  4. cargo 1.41.0 (626f0f40e 2019-12-03)

手動構建和運行 Rust

從在屏幕上打印“Hello, world!”的簡單程序開始。打開你喜歡的文本編輯器,然后鍵入以下程序:

  1. $ cat hello.rs
  2. fn main() {
  3.     println!("Hello, world!");
  4. }

以擴展名 .rs 保存文件,以將其標識為 Rust 源代碼文件。

使用 Rust 編譯器 rustc 編譯程序:

  1. $ rustc hello.rs

編譯后,你將擁有一個與源程序同名的二進制文件:

  1. $ ls -l
  2. total 2592
  3. -rwxr-xr-x. 1 user group 2647944 Feb 13 14:14 hello
  4. -rw-r--r--. 1 user group      45 Feb 13 14:14 hello.rs
  5. $

執行程序以驗證其是否按預期運行:

  1. $ ./hello
  2. Hello, world!

這些步驟對于較小的程序或任何你想快速測試的東西就足夠了。但是,在進行涉及到多人的大型程序時,Cargo 是前進的最佳之路。

使用 Cargo 創建新包

Cargo 是 Rust 的構建系統和包管理器。它可以幫助開發人員下載和管理依賴項,并幫助創建 Rust 包。在 Rust 社區中,Rust 中的“包”通常被稱為“crate”(板條箱),但是在本文中,這兩個詞是可以互換的。請參閱 Rust 社區提供的 Cargo FAQ 來區分。

如果你需要有關 Cargo 命令行實用程序的任何幫助,請使用 --help-h 命令行參數:

  1. $ cargo help

要創建一個新的包,請使用關鍵字 new,跟上包名稱。在這個例子中,使用 hello_opensource 作為新的包名稱。運行該命令后,你將看到一條消息,確認 Cargo 已創建具有給定名稱的二進制包:

  1. $ cargo new hello_opensource
  2.      Created binary (application) `hello_opensource` package

運行 tree 命令以查看目錄結構,它會報告已創建了一些文件和目錄。首先,它創建一個帶有包名稱的目錄,并且在該目錄內有一個存放你的源代碼文件的 src 目錄:

  1. $ tree .
  2. .
  3. └── hello_opensource
  4.     ├── Cargo.toml
  5.     └── src
  6.         └── main.rs
  7.  
  8. 2 directories, 2 files

Cargo 不僅可以創建包,它也創建了一個簡單的 “Hello, world” 程序。打開 main.rs 文件看看:

  1. $ cat hello_opensource/src/main.rs
  2. fn main() {
  3.     println!("Hello, world!");
  4. }

下一個要處理的文件是 Cargo.toml,這是你的包的配置文件。它包含有關包的信息,例如其名稱、版本、作者信息和 Rust 版本信息。

程序通常依賴于外部庫或依賴項來運行,這使你可以編寫應用程序來執行不知道如何編碼或不想花時間編碼的任務。你所有的依賴項都將在此文件中列出。此時,你的新程序還沒有任何依賴關系。打開 Cargo.toml 文件并查看其內容:

  1. $ cat hello_opensource/Cargo.toml
  2. [package]
  3. name = "hello_opensource"
  4. version = "0.1.0"
  5. authors = ["user <user@mail.com>"]
  6. edition = "2018"
  7.  
  8. # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
  9.  
  10. [dependencies]

使用 Cargo 構建程序

到目前為止,一切都很順利。現在你已經有了一個包,可構建一個二進制文件(也稱為可執行文件)。在此之前,進入包目錄:

  1. $ cd hello_opensource/

你可以使用 Cargo 的 build 命令來構建包。注意消息說它正在“編譯”你的程序:

  1. $ cargo build
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.38s

運行 build 命令后,檢查項目目錄發生了什么:

  1. $ tree .
  2. .
  3. ├── Cargo.lock
  4. ├── Cargo.toml
  5. ├── src
  6.    └── main.rs
  7. └── target
  8.     └── debug
  9.         ├── build
  10.         ├── deps
  11.            ├── hello_opensource-147b8a0f466515dd
  12.            └── hello_opensource-147b8a0f466515dd.d
  13.         ├── examples
  14.         ├── hello_opensource
  15.         ├── hello_opensource.d
  16.         └── incremental
  17.             └── hello_opensource-3pouh4i8ttpvz
  18.                 ├── s-fkmhjmt8tj-x962ep-1hivstog8wvf
  19.                    ├── 1r37g6m45p8rx66m.o
  20.                    ├── 2469ykny0eqo592v.o
  21.                    ├── 2g5i2x8ie8zed30i.o
  22.                    ├── 2yrvd7azhgjog6zy.o
  23.                    ├── 3g9rrdr4hyk76jtd.o
  24.                    ├── dep-graph.bin
  25.                    ├── query-cache.bin
  26.                    ├── work-products.bin
  27.                    └── wqif2s56aj0qtct.o
  28.                 └── s-fkmhjmt8tj-x962ep.lock
  29.  
  30. 9 directories, 17 files

哇!編譯過程產生了許多中間文件。另外,你的二進制文件將以與軟件包相同的名稱保存在 ./target/debug 目錄中。

使用 Cargo 運行你的應用程序

現在你的二進制文件已經構建好了,使用 Cargo 的 run 命令運行它。如預期的那樣,它將在屏幕上打印 Hello, world!

  1. $ cargo run
  2.     Finished dev [unoptimized + debuginfo] target(s) in 0.01s
  3.      Running `target/debug/hello_opensource`
  4. Hello, world!

或者,你可以直接運行二進制文件,該文件位于:

  1. $ ls -l ./target/debug/hello_opensource
  2. -rwxr-xr-x. 2 root root 2655552 Feb 13 14:19 ./target/debug/hello_opensource

如預期的那樣,它產生相同的結果:

  1. $ ./target/debug/hello_opensource
  2. Hello, world!

假設你需要重建包,并丟棄早期編譯過程創建的所有二進制文件和中間文件。Cargo 提供了一個方便的clean 選項來刪除所有中間文件,但源代碼和其他必需文件除外:

  1. $ cargo clean
  2. $ tree .
  3. .
  4. ├── Cargo.lock
  5. ├── Cargo.toml
  6. └── src
  7.     └── main.rs
  8.  
  9. 1 directory, 3 files

對程序進行一些更改,然后再次運行以查看其工作方式。例如,下面這個較小的更改將 Opensource 添加到 Hello, world! 字符串中:

  1. $ cat src/main.rs
  2. fn main() {
  3.     println!("Hello, Opensource world!");
  4. }

現在,構建該程序并再次運行它。這次,你會在屏幕上看到 Hello, Opensource world!

  1. $ cargo build
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.39s
  4.  
  5. $ cargo run
  6.     Finished dev [unoptimized + debuginfo] target(s) in 0.01s
  7.      Running `target/debug/hello_opensource`
  8. Hello, Opensource world!

使用 Cargo 添加依賴項

Cargo 允許你添加程序需要運行的依賴項。使用 Cargo 添加依賴項非常容易。每個 Rust 包都包含一個 Cargo.toml 文件,其中包含一個依賴關系列表(默認為空)。用你喜歡的文本編輯器打開該文件,找到 [dependencies] 部分,然后添加要包含在包中的庫。例如,將 rand 庫添加為依賴項:

  1. $ cat Cargo.toml
  2. [package]
  3. name = "hello_opensource"
  4. version = "0.1.0"
  5. authors = ["test user <test@mail.com>"]
  6. edition = "2018"
  7.  
  8. # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
  9.  
  10. [dependencies]
  11. rand = "0.3.14"

試試構建你的包,看看會發生什么。

  1. $ cargo build
  2.     Updating crates.io index
  3.    Compiling libc v0.2.66
  4.    Compiling rand v0.4.6
  5.    Compiling rand v0.3.23
  6.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  7.     Finished dev [unoptimized + debuginfo] target(s) in 4.48s

現在,Cargo 會聯系 Crates.io(這是 Rust 用于存儲 crate(或包)的中央倉庫),并下載和編譯 rand。但是,等等 —— libc 包是怎么回事?你沒有要安裝 libc 啊。是的,rand 包依賴于 libc 包;因此,Cargo 也會下載并編譯 libc

庫的新版本會不斷涌現,而 Cargo 提供了一種使用 update 命令更新其所有依賴關系的簡便方法:

  1. cargo update

你還可以選擇使用 -p 標志跟上包名稱來更新特定的庫:

  1. cargo update -p rand

使用單個命令進行編譯和運行

到目前為止,每當對程序進行更改時,都先使用了 build 之后是 run。有一個更簡單的方法:你可以直接使用 run 命令,該命令會在內部進行編譯并運行該程序。要查看其工作原理,請首先清理你的軟件包目錄:

  1. $ cargo clean
  2. $ tree .
  3. .
  4. ├── Cargo.lock
  5. ├── Cargo.toml
  6. └── src
  7.     └── main.rs
  8.  
  9. 1 directory, 3 files

現在執行 run。輸出信息表明它已進行編譯,然后運行了該程序,這意味著你不需要每次都顯式地運行 build

  1. $ cargo run
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.41s
  4.      Running `target/debug/hello_opensource`
  5. Hello, world!

在開發過程中檢查代碼

在開發程序時,你經常會經歷多次迭代。你需要確保你的程序沒有編碼錯誤并且可以正常編譯。你不需要負擔在每次編譯時生成二進制文件的開銷。Cargo 為你提供了一個 check 選項,該選項可以編譯代碼,但跳過了生成可執行文件的最后一步。首先在包目錄中運行 cargo clean

  1. $ tree .
  2. .
  3. ├── Cargo.lock
  4. ├── Cargo.toml
  5. └── src
  6.     └── main.rs
  7.  
  8. 1 directory, 3 files

現在運行 check 命令,查看對目錄進行了哪些更改:

  1. $ cargo check
  2.     Checking hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.18s

該輸出顯示,即使在編譯過程中創建了中間文件,但沒有創建最終的二進制文件或可執行文件。這樣可以節省一些時間,如果該包包含了數千行代碼,這非常重要:

  1. $ tree .
  2. .
  3. ├── Cargo.lock
  4. ├── Cargo.toml
  5. ├── src
  6.    └── main.rs
  7. └── target
  8.     └── debug
  9.         ├── build
  10.         ├── deps
  11.            ├── hello_opensource-842d9a06b2b6a19b.d
  12.            └── libhello_opensource-842d9a06b2b6a19b.rmeta
  13.         ├── examples
  14.         └── incremental
  15.             └── hello_opensource-1m3f8arxhgo1u
  16.                 ├── s-fkmhw18fjk-542o8d-18nukzzq7hpxe
  17.                    ├── dep-graph.bin
  18.                    ├── query-cache.bin
  19.                    └── work-products.bin
  20.                 └── s-fkmhw18fjk-542o8d.lock
  21.  
  22. 9 directories, 9 files

要查看你是否真的節省了時間,請對 buildcheck 命令進行計時并進行比較。首先,計時 build 命令:

  1. $ time cargo build
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.40s
  4.  
  5. real    0m0.416s
  6. user    0m0.251s
  7. sys     0m0.199s

在運行 check 命令之前清理目錄:

  1. $ cargo clean

計時 check 命令:

  1. $ time cargo check
  2.     Checking hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.15s
  4.  
  5. real    0m0.166s
  6. user    0m0.086s
  7. sys     0m0.081s

顯然,check 命令要快得多。

建立外部 Rust 包

到目前為止,你所做的這些都可以應用于你從互聯網上獲得的任何 Rust crate。你只需要下載或克隆存儲庫,移至包文件夾,然后運行 build 命令,就可以了:

  1. git clone <github-like-url>
  2. cd <package-folder>
  3. cargo build

使用 Cargo 構建優化的 Rust 程序

到目前為止,你已經多次運行 build,但是你注意到它的輸出了嗎?不用擔心,再次構建它并密切注意:

  1. $ cargo build
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished dev [unoptimized + debuginfo] target(s) in 0.36s

看到了每次編譯后的 [unoptimized + debuginfo] 文本了嗎?這意味著 Cargo 生成的二進制文件包含大量調試信息,并且未針對執行進行優化。開發人員經常經歷開發的多次迭代,并且需要此調試信息進行分析。同樣,性能并不是開發軟件時的近期目標。因此,對于現在而言是沒問題的。

但是,一旦準備好發布軟件,就不再需要這些調試信息。而是需要對其進行優化以獲得最佳性能。在開發的最后階段,可以將 --release 標志與 build 一起使用。仔細看,編譯后,你應該會看到 [optimized] 文本:

  1. $ cargo build --release
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.     Finished release [optimized] target(s) in 0.29s

如果愿意,你可以通過這種練習來了解運行優化軟件與未優化軟件時節省的時間。

使用 Cargo 創建庫還是二進制文件

任何軟件程序都可以粗略地分類為獨立二進制文件或庫。一個獨立二進制文件也許即使是當做外部庫使用的,自身也是可以運行的。但是,作為一個庫,是可以被另一個獨立二進制文件所利用的。到目前為止,你在本教程中構建的所有程序都是獨立二進制文件,因為這是 Cargo 的默認設置。 要創建一個,請添加 --lib 選項:

  1. $ cargo new --lib libhello
  2.      Created library `libhello` package

這次,Cargo 不會創建 main.rs 文件,而是創建一個 lib.rs 文件。 你的庫的代碼應該是這樣的:

  1. $ tree .
  2. .
  3. └── libhello
  4.     ├── Cargo.toml
  5.     └── src
  6.         └── lib.rs
  7.  
  8. 2 directories, 2 files

Cargo 就是這樣的,不要奇怪,它在你的新庫文件中添加了一些代碼。通過移至包目錄并查看文件來查找添加的內容。默認情況下,Cargo 在庫文件中放置一個測試函數。

使用 Cargo 運行測試

Rust 為單元測試和集成測試提供了一流的支持,而 Cargo 允許你執行以下任何測試:

  1. $ cd libhello/
  2.  
  3. $ cat src/lib.rs
  4. #[cfg(test)]
  5. mod tests {
  6.     #[test]
  7.     fn it_works() {
  8.         assert_eq!(2 + 2, 4);
  9.     }
  10. }

Cargo 有一個方便的 test 命令,可以運行代碼中存在的任何測試。嘗試默認運行 Cargo 在庫代碼中放入的測試:

  1. $ cargo test
  2.    Compiling libhello v0.1.0 (/opensource/libhello)
  3.     Finished test [unoptimized + debuginfo] target(s) in 0.55s
  4.      Running target/debug/deps/libhello-d52e35bb47939653
  5.  
  6. running 1 test
  7. test tests::it_works ... ok
  8.  
  9. test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
  10.  
  11.    Doc-tests libhello
  12.  
  13. running 0 tests
  14.  
  15. test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

深入了解 Cargo 內部

你可能有興趣了解在運行一個 Cargo 命令時它底下發生了什么。畢竟,在許多方面,Cargo 只是個封裝器。要了解它在做什么,你可以將 -v 選項與任何 Cargo 命令一起使用,以將詳細信息輸出到屏幕。

這是使用 -v 選項運行 buildclean 的幾個例子。

build 命令中,你可以看到這些給定的命令行選項觸發了底層的 rustc(Rust 編譯器):

  1. $ cargo build -v
  2.    Compiling hello_opensource v0.1.0 (/opensource/hello_opensource)
  3.      Running `rustc --edition=2018 --crate-name hello_opensource src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=147b8a0f466515dd -C extra-filename=-147b8a0f466515dd --out-dir /opensource/hello_opensource/target/debug/deps -C incremental=/opensource/hello_opensource/target/debug/incremental -L dependency=/opensource/hello_opensource/target/debug/deps`
  4.     Finished dev [unoptimized + debuginfo] target(s) in 0.36s

clean 命令表明它只是刪除了包含中間文件和二進制文件的目錄:

  1. $ cargo clean -v
  2.     Removing /opensource/hello_opensource/target

不要讓你的技能生銹

要擴展你的技能,請嘗試使用 Rust 和 Cargo 編寫并運行一個稍微復雜的程序。很簡單就可以做到:例如,嘗試列出當前目錄中的所有文件(可以用 9 行代碼完成),或者嘗試自己回顯輸入。小型的實踐應用程序可幫助你熟悉語法以及編寫和測試代碼的過程。

本文為剛起步的 Rust 程序員提供了大量信息,以使他們可以開始入門 Cargo。但是,當你開始處理更大、更復雜的程序時,你需要對 Cargo 有更深入的了解。當你準備好迎接更多內容時,請下載并閱讀 Rust 團隊編寫的開源的《Cargo 手冊》,看看你可以創造什么! 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-11-01 12:45:29

UbuntuLinuxRust

2020-12-03 12:06:54

HarmonyOS

2010-10-08 09:26:17

.NET微軟

2024-11-12 08:03:27

JavaScript管理器安全

2023-04-17 07:36:28

Arch LinuxGUI

2021-07-27 12:58:46

Linux包管理器安命令

2010-01-06 16:33:24

Ubuntu軟件包

2018-08-23 16:51:40

Linux軟件倉庫包管理器

2016-09-12 15:00:46

Linux包管理器新手

2010-05-27 10:12:46

openSUSEYaST

2022-03-21 21:28:00

Homebrew包管理器Linux

2010-01-05 10:14:09

Ubuntu軟件包

2022-02-28 10:22:08

前端管理工具

2013-11-20 15:32:13

紅帽RedHatYUM包

2018-10-15 15:00:42

UnixSysget包管理器

2021-11-11 11:13:20

js Npm基礎

2021-12-09 09:27:22

MacOSHomebrew包管理器

2022-02-21 09:58:31

包管理器npmyarn

2022-10-11 16:09:27

系統Linux管理器

2021-01-30 09:23:27

Windows操作系統微軟
點贊
收藏

51CTO技術棧公眾號

中文字幕日韩专区| 精品av在线播放| 国产中文字幕日韩| 日本a级片视频| 国产精品nxnn| 色偷偷久久人人79超碰人人澡| 亚洲国产精品久久久久婷婷老年| 国产欧美日韩综合精品一区二区三区| 伊人狠狠色j香婷婷综合| 亚洲国产精品一区二区三区| 日韩av播放器| 尤物在线网址| 欧美极品少妇xxxxⅹ高跟鞋| 51国产成人精品午夜福中文下载| 成人精品在线看| 99热精品久久| 亚洲欧美另类国产| 原创真实夫妻啪啪av| 性欧美gay| 一区二区三区加勒比av| 日本一区二区三区在线视频| 国产综合视频在线| 蜜桃av噜噜一区| 97视频国产在线| 成人性生活毛片| 欧美猛男同性videos| 日韩三级视频中文字幕| 黄色aaa级片| 妞干网免费在线视频| 亚洲精品日韩一| 亚洲国产日韩综合一区| 亚洲av毛片成人精品| 精品一区二区免费视频| 国产成人97精品免费看片| 久艹视频在线观看| 婷婷丁香综合| 深夜福利日韩在线看| 色无极影院亚洲| 欧美日韩一区二区三区四区不卡| 日韩一区二区精品在线观看| 亚洲欧洲日本精品| 快播电影网址老女人久久| 性久久久久久久久久久久| 国产911在线观看| 久cao在线| 中文字幕一区二区视频| 天天综合色天天综合色hd| 免费在线视频一级不卡| 91在线精品秘密一区二区| 99视频网站| 午夜精品在线播放| 国产精品亚洲午夜一区二区三区 | www成人在线| 激情亚洲网站| 性视频1819p久久| 日本五十熟hd丰满| 9久re热视频在线精品| 欧美精品久久久久a| 极品盗摄国产盗摄合集| 中文精品久久| 欧美乱大交xxxxx另类电影| 老熟妻内射精品一区| 围产精品久久久久久久| 久久久久www| 午夜激情福利网| 一区二区电影| 欧美激情视频网站| 日产欧产va高清| 国产视频一区欧美| 日韩免费av一区二区| 国产99久久久久久免费看| 日韩精品五月天| 国产精品丝袜视频| 国产又粗又猛又黄又爽| 国产精品99久久久久久似苏梦涵 | 亚洲福利在线观看视频| 国产成人精品免费一区二区| 国产精品国产三级国产专区53| 国精产品一品二品国精品69xx| 菠萝蜜视频在线观看一区| 欧美另类网站| 视频免费一区| 亚洲国产精品久久久男人的天堂| cao在线观看| 日韩精品专区| 7777精品伊人久久久大香线蕉最新版 | 88在线观看91蜜桃国自产| 少妇性l交大片7724com| 久久九九热re6这里有精品| 亚洲乱码一区av黑人高潮| 日本美女xxx| 欧美阿v一级看视频| 91精品国产成人| 一区二区视频免费| 国产传媒一区在线| 美女一区视频| 精品176二区| 狠狠操狠狠色综合网| 成人亚洲视频在线观看| 久久国产精品美女| 亚洲免费人成在线视频观看| 色偷偷男人天堂| 日韩亚洲国产欧美| 国产精品自拍偷拍视频| 可以免费看毛片的网站| 久久久综合精品| 女女同性女同一区二区三区按摩| 日韩在线伦理| 日韩欧美国产综合一区| 韩国女同性做爰三级| 国产精品激情| 国产精品一区二区三区久久| 天堂中文在线观看视频| 国产精品国产自产拍高清av王其 | 麻豆视频在线观看免费网站黄| 欧美色视频在线观看| 久久久久久久人妻无码中文字幕爆| 欧美精品尤物在线观看 | 成人看片网页| 亚洲精品国产精品国自产观看浪潮| 欧日韩不卡视频| 老鸭窝毛片一区二区三区| 51成人做爰www免费看网站| 成人在线免费看| 精品女厕一区二区三区| 欧美体内she精高潮| 欧美日韩中文一区二区| 欧美一区二区三区艳史| 丰满少妇一级片| 亚洲色图欧洲色图| 污片在线免费看| 国产亚洲一区| 国产91精品久久久久| 黄色片一区二区| 一区二区三区在线观看视频| 免费网站在线观看黄| 日韩av在线播放网址| 日韩美女在线观看一区| 三级在线观看| 狠狠久久五月精品中文字幕| 欧美成人三级伦在线观看| 一二三区不卡| 欧美亚洲国产激情| 亚洲精品国产精品国自产在线| 欧美人禽zoz0强交| 精品中文字幕一区二区小辣椒| 日韩av一区二区三区在线| 自拍偷拍亚洲视频| 亚洲精品一区二三区不卡| 日韩欧美三级在线观看| 成人app下载| 欧美三级在线观看视频| 久久夜色电影| 91精品国产91久久久| 午夜激情小视频| 高跟丝袜一区二区三区| 亚洲天堂网一区二区| 男女精品网站| 色综合久久久久久久久五月| ww久久综合久中文字幕| 中文字幕精品久久久久| 91精品中文字幕| 亚洲欧美视频在线观看| 亚洲AV成人精品| 亚洲婷婷免费| 久久久久免费网| 日韩三区免费| 日韩亚洲精品视频| 国产视频手机在线| 亚洲伊人色欲综合网| 中文字幕乱视频| 国产一区亚洲| 不卡视频一区二区| 涩涩涩在线视频| 国产午夜精品视频免费不卡69堂| 做爰视频毛片视频| 国产精品免费视频一区| 午夜影院免费版| 99热免费精品在线观看| 色姑娘综合av| 精品国产一区二| 5278欧美一区二区三区| av女优在线| 欧美不卡一二三| 国产无套丰满白嫩对白| 中文字幕不卡在线观看| 无码人妻aⅴ一区二区三区玉蒲团| 国产日韩免费| 亚洲人一区二区| 精品国内亚洲2022精品成人| 国产成人午夜视频网址| 操你啦在线视频| 亚洲另类图片色| www.麻豆av| 色妞www精品视频| 色在线观看视频| 国产午夜三级一区二区三| 视频区 图片区 小说区| 麻豆91精品| 成人在线观看毛片| 极品美女一区二区三区| 亚洲最大福利网| 姬川优奈av一区二区在线电影| 美日韩在线视频| 国产日本在线| 亚洲大胆美女视频| 国产精品乱码久久久| 一级日本不卡的影视| jizz中文字幕| av动漫一区二区| 亚洲18在线看污www麻豆| 亚洲一区国产| 日韩欧美猛交xxxxx无码| 日本一区二区在线看| 国产精品美女xx| 99精品国产九九国产精品| 欧美专区在线观看| tube8在线hd| 久久精品中文字幕一区| 免费在线稳定资源站| 亚洲福利小视频| 99久久久久久久| 精品视频一区三区九区| 丰满少妇xoxoxo视频| 亚洲线精品一区二区三区八戒| 肉色超薄丝袜脚交69xx图片| 久久精品在这里| 真人bbbbbbbbb毛片| 国产**成人网毛片九色| 亚洲高清av一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲熟妇av日韩熟妇在线| 欧美日本一区| 午夜欧美性电影| 国产专区第一页| 久久99日本精品| 亚洲精品高清无码视频| 亚洲欧美春色| www.com毛片| 国产精品视区| 69堂免费视频| 国产欧美激情| 欧美黄色免费影院| 免费视频久久| 国产日韩一区二区在线| 中日韩男男gay无套| 一卡二卡三卡视频| 韩日视频一区| 很污的网站在线观看| 精品成人国产| 五十路熟女丰满大屁股| 亚洲国产午夜| 久久久久久久久久久视频| 国产精品日本欧美一区二区三区| 欧美,日韩,国产在线| 国产欧美午夜| 久久久久国产精品熟女影院| 日韩不卡手机在线v区| 国产真实乱子伦| 久久婷婷久久| 亚洲精品久久久久久宅男| 精品在线播放午夜| 波多野结衣电影免费观看| 成人午夜视频在线| aaaaa级少妇高潮大片免费看| 久久蜜桃一区二区| 91成人精品一区二区| 中文字幕一区二区不卡| 国产这里有精品| 婷婷中文字幕综合| 免费看污视频的网站| 欧美日本国产视频| 精品人妻午夜一区二区三区四区 | 色偷偷成人一区二区三区91| 日韩久久久久久久久久| 555www色欧美视频| 日本高清视频www| 亚洲少妇激情视频| 国产丝袜在线| 97成人在线视频| 日韩黄色在线| 国产精品久久久对白| 蜜桃一区二区| 五月天综合婷婷| 国产一级久久| 日本高清久久久| www.亚洲国产| 欧美福利在线视频| 婷婷综合久久一区二区三区| 伊人网av在线| 亚洲黄页视频免费观看| 在线观看免费网站黄| 久久久免费电影| 成人在线免费av| 国语精品免费视频| 首页国产精品| 国产精品后入内射日本在线观看| 久久se精品一区精品二区| www.啪啪.com| 中文字幕在线不卡| 欧美激情黑白配| 欧美大片在线观看| 成年午夜在线| 97精品国产97久久久久久| 欧洲亚洲精品久久久久| 精品在线视频一区二区| 亚洲欧洲日韩| 亚洲视频在线a| av一区二区三区在线| 国产一区第一页| 欧美性极品xxxx娇小| 亚洲av色香蕉一区二区三区| 国产亚洲视频在线| 国产美女高潮在线观看| 91中文字幕在线| re久久精品视频| 男人操女人逼免费视频| 国v精品久久久网| 男人av资源站| 欧美性生活影院| 青青色在线视频| 97在线看福利| jazzjazz国产精品久久| 四虎4hu永久免费入口| 毛片av中文字幕一区二区| 爱爱免费小视频| 五月天欧美精品| 蜜桃视频污在线观看| 欧美xxxx18性欧美| 羞羞视频在线观看一区二区| 色噜噜一区二区| 视频在线观看一区二区三区| 91精品国产自产| 午夜精彩视频在线观看不卡| 高潮毛片7777777毛片| 欧美成人午夜激情在线| av在线成人| 日本黄色a视频| 国内精品国产三级国产a久久| 国产又粗又猛又爽又黄的视频小说| 色婷婷综合中文久久一本| 色猫av在线| 国产成人一区二| 国产乱码精品一区二区亚洲 | 狂野欧美xxxx韩国少妇| 亚洲一区二区不卡视频| 麻豆国产精品777777在线| 影音先锋制服丝袜| 在线观看免费一区| 国产亚洲依依| 国产精品偷伦视频免费观看国产| 欧美在线观看视频一区| 欧美特级aaa| **性色生活片久久毛片| 国产免费黄色录像| 九九热最新视频//这里只有精品 | 亚洲成人激情社区| 日本三级中国三级99人妇网站| 久久综合中文| 女人裸体性做爰全过| 7777精品伊人久久久大香线蕉| 国产区在线观看| 国产精品一区二区你懂得| 亚洲理伦在线| 中文字幕第20页| 欧美色图12p| 国产嫩草在线视频| 久久99精品久久久久久秒播放器 | 实拍女处破www免费看| 欧美日韩国产在线观看| 四虎影视成人| 久久国产精品亚洲va麻豆| 蜜乳av另类精品一区二区| 人妻互换一区二区激情偷拍| 日韩一区二区三区免费观看| av在线最新| 亚洲一区精品视频| 国产成人av一区二区三区在线观看| 日本熟女一区二区| 国产午夜精品美女视频明星a级| 国产在视频一区二区三区吞精| 国产女主播av| 久久色在线观看| 国产精品视频一区二区三区,| 欧美精品videos另类日本| 综合伊思人在钱三区| 午夜精品免费看| 精品久久久久久久久久久久久久| av大全在线免费看| av一区二区三区四区电影| 久久久久久久高潮| 国产老头老太做爰视频| 日韩精品视频中文在线观看| 色综合久久久| 日韩av三级在线| 亚洲图片激情小说| 免费国产在线观看| 亚洲一区二区三区久久| 另类图片国产| 久久国产在线视频|