免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

CMake構建實戰(zhàn):從核心機制到常見坑,一次講透

CMake構建實戰(zhàn):從核心機制到常見坑,一次講透 干這行這些年每天繞不開的就是 cmake 構建這套流程。不管你是接手別人的 C/C 項目還是自己從零搭一個庫第一步幾乎都是看 CMakeLists.txt 寫得怎么樣。說實話cmake 的上手門檻并不高但真正用明白的人不多不少人停留在“能跑就行”的階段一碰到跨平臺、多目錄、第三方依賴就抓瞎。這篇東西不打算做成文檔式的羅列我更想以一個實際用 cmake 構建過不少項目的從業(yè)者身份把核心機制、常見玩法、以及那些文檔里不會寫的坑一次性講透。無論你是剛接觸構建的新手還是已經(jīng)在用但經(jīng)常被奇奇怪怪的 CMake Error 折磨的老手這篇文章應該都能給你一些參考。1. cmake到底解決了什么問題——先搞清它在構建鏈中的位置1.1 從手寫 Makefile 到 cmake 的過渡很多人的困惑從名字開始。cmake 不是一個編譯器也不是一個獨立的構建工具它是一個“構建系統(tǒng)的生成器”。換句話說你自己不直接干活而是把活派給底層的構建系統(tǒng)去干。這個底層構建系統(tǒng)可以是 Unix 平臺的 Makefile可以是 Ninja也可以是 Windows 上的 Visual Studio 工程。在沒有 cmake 的年代一個跨平臺 C/C 項目要同時支持 Linux 和 Windows你需要維護兩套甚至三套構建腳本Linux 下寫 MakefileWindows 下維護 .vcxprojmacOS 下甚至還要考慮 Xcode 工程。一旦代碼文件變了或者新增了目錄所有平臺下的構建腳本都要同步改一遍這幾乎是噩夢。我第一次真正被 Makefile 折磨到崩潰是在一個同時依賴 OpenSSL、zlib 和幾十個內部模塊的通信項目里。頭文件路徑、鏈接庫順序、編譯宏全部要手寫維護。某次為了加一個新模塊改了 Makefile 里的依賴關系結果漏了一個頭文件路徑編譯全過了運行時崩潰查了整整一天才定位到是構建腳本的問題。從那時起我就決定在新項目里統(tǒng)一用 cmake至少不用再為每臺機器的構建環(huán)境重復造輪子。1.2 cmake 和 makefile 的本質區(qū)別這里直接說結論。Makefile 是面向“當前這棵樹”的構建規(guī)則它告訴 make 命令如何編譯、如何鏈接、文件之間依賴關系怎樣。它是具體的、不可移植的。而 cmake 的 CMakeLists.txt 是更高一層的抽象它描述的是項目的結構與目標然后由 cmake 替你生成對應平臺的 Makefile 或 IDE 工程。用生活化的類比來說Makefile 像是你雇了一個工人你直接告訴他一磚一瓦怎么砌。cmake 則像是一個項目經(jīng)理你只告訴他這里要一棟樓、那里要一個花園具體用哪臺吊車、哪個施工隊由他根據(jù)現(xiàn)場情況去安排。兩者直觀對比一下對比項MakefileCMake位置構建規(guī)則文件生成構建規(guī)則的文件跨平臺能力基本綁定 Unix make支持 Makefile/Ninja/VS/Xcode 等多類生成器依賴管理手動維護內置 find_package、FetchContent 等機制IDE 集成差基本靠命令行VS、CLion、VSCode 都原生支持學習成本語法簡單但組織繁瑣入門容易進階需理解 target 與生成器表達式適合規(guī)模小項目、個人工具中大型項目、團隊協(xié)作、跨平臺這不是說 Makefile 一無是處它就是 cmake 的下游產物之一很多時候你還會直接讀到它。但如果你要新建一個項目或者維護一個需要長期演進的代碼庫選 cmake 幾乎是現(xiàn)在行業(yè)里的默認答案。1.3 構建鏈條中的兩個階段理解 cmake 一定要先分清兩個階段。第一個階段是配置階段。你執(zhí)行cmake -S . -B buildcmake 會讀取 CMakeLists.txt把里面的邏輯展開成一套具體的構建文件。這個階段會做很多“探路”工作檢查編譯器是否存在、檢測系統(tǒng)庫、嘗試編譯并運行一段小測試代碼來驗證某個特性然后把結果緩存下來。第二個階段才是真正的構建階段。你執(zhí)行cmake --build buildcmake 調用底層構建系統(tǒng)比如 make 或 ninja執(zhí)行實際的編譯和鏈接。這里不再需要 cmake 去分析你的 CMakeLists.txt它只是作為入口去驅動底層工具。這個“兩個階段”心智模型非常重要。我在實際工作中見過很多人改完 CMakeLists.txt 只跑cmake --build發(fā)現(xiàn)改動不生效然后開始懷疑人生。實際上改了 CMakeLists.txt 之后必須重新回到配置階段也就是重跑cmake -S . -B build或者讓 IDE 自動觸發(fā)一次重配置修改才會生效。2. 環(huán)境準備與第一個 cmake 工程2.1 各平臺安裝 cmake 的方法cmake 的安裝本身相當簡單但不同平臺有各自需要注意的地方。Linux 上最常見的做法是用包管理器裝。Ubuntu/Debian 系直接sudo apt install cmake。不過這里有個坑apt 源里的 cmake 版本通常偏舊。Ubuntu 20.04 自帶的可能還是 3.16 左右的版本很多新特性用不了。如果你的項目要求cmake_minimum_required(VERSION 3.20)甚至更高你需要先確認系統(tǒng)源的版本或者使用官方腳本安裝。我個人實踐下來更推薦用 pip 安裝pip install cmake。這個方案的好處是版本新、干凈、不污染系統(tǒng)卸載也方便。Windows 上直接去官方下載安裝包即可。另外也可以用winget install Kitware.CMake裝完就在 PATH 里不需要額外配置。macOS 上則是brew install cmake同樣沒什么坑。安裝完成后驗證版本用cmake --version能看到版本號就說明裝好了。這里提醒一句cmake 的版本策略很保守高版本生成的構建目錄可以匹配低版本的 cmake但反過來不行。所以如果團隊協(xié)作建議所有人在同一個主要版本線附近至少不要低于項目里cmake_minimum_required指定的版本。2.2 cmake-gui 什么時候用得上很多人看到 cmake 第一眼是 cmake-gui 這個圖形界面。它長得很樸素左邊一堆變量、右邊一堆按鈕實際上它就是配置階段的圖形化入口。你可以在界面上設定CMAKE_BUILD_TYPE是 Debug 還是 Release可以指定CMAKE_INSTALL_PREFIX可以勾選各種option定義的功能開關甚至可以手動添加CMAKE_PREFIX_PATH來告訴 cmake 去哪找某個依賴庫。那是不是新手就該用 cmake-gui我的看法是能不用就不用。原因很簡單圖形界面的操作不透明你點了一下“Configure”cmake 到底做了什么、生成了什么、為啥某個變量變成紅色 NOTFOUND它不會告訴你你也不容易記住。相比之下命令行操作直接、可復現(xiàn)而且這些配置步驟最終都能寫進腳本里讓整個構建過程自動化。但 cmake-gui 也不是完全沒用。當你在排查一個復雜的依賴查找問題時GUI 里能把所有緩存變量攤開來看比命令行一行行敲cmake -LA要直觀得多。我會在排查問題時才打開它專門看某個庫的路徑變量到底被設置成了什么。2.3 最小工程從零開始不整那些虛的直接寫一個能跑的 CMakeLists.txt。假設你的項目就一個單文件main.cpp那么 CMakeLists.txt 只需要六行cmake_minimum_required(VERSION 3.16) project(FirstDemo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(demo main.cpp)逐行說下作用。第一行指定 cmake 最低版本如果本機版本太舊會直接報錯。第二行定義工程名并聲明語言只涉及 C。第三和第四行把編譯標準設為 C17CMAKE_CXX_STANDARD_REQUIRED設為 ON 表示這是硬性要求編譯器不支持就直接掛掉而不是打一個警告然后退回去用默認標準。第五行創(chuàng)建了一個名為 demo 的可執(zhí)行目標對應的源碼是 main.cpp。然后執(zhí)行cmake -S . -B build cmake --build build -j-S指定源碼目錄-B指定構建目錄。構建目錄和源碼目錄分開是 cmake 的默認最佳實踐所有的中間文件、緩存、生成物都在 build 目錄里不污染源碼樹。構建完成之后build目錄下會多出一個可執(zhí)行文件 demoLinux 下或 demo.exeWindows 下直接./build/demo就能跑。這段流程雖然簡單但它是后面所有高級用法的地基。后面我們聊到的變量、目標、依賴查找本質上都是在這套基礎上做擴展。3. 核心語法與目標target設計才是現(xiàn)代 cmake 的靈魂3.1 變量、緩存變量與環(huán)境變量cmake 里的變量引用方式很統(tǒng)一用${VAR}。你可以用set來定義變量set(PROJECT_VERSION_MAJOR 1) set(PROJECT_VERSION_MINOR 2) set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})這里的變量是普通變量作用域從定義位置到當前 CMakeLists.txt 文件結束或者到子目錄/函數(shù)邊界被覆蓋。真正干活的時候普通人最常用到的其實是緩存變量它由配置階段記錄在 CMakeCache.txt 里。你可以在命令行用-D傳入也可以在 CMakeLists.txt 里用option來定義option(ENABLE_TESTS Build unit tests ON)如果用戶在執(zhí)行 cmake 時用了-DENABLE_TESTSOFF那這個 ON 就不會生效緩存變量優(yōu)先。環(huán)境變量用$ENV{VAR}讀取一般用于讀取系統(tǒng)環(huán)境信息比如$ENV{HOME}但實踐中不建議在構建邏輯里過度依賴環(huán)境變量因為不透明、不可復現(xiàn)。真正有版本依賴的配置都應該寫成 cmake 變量。3.2 以目標為核心的寫法PUBLIC/PRIVATE 怎么理解現(xiàn)代 cmake 的核心概念是“目標”。目標就是add_executable或add_library創(chuàng)建出來的東西你可以把編譯選項、宏定義、頭文件路徑、鏈接庫統(tǒng)統(tǒng)掛在它身上。最關鍵的語法是三個target_include_directories(mylib PUBLIC include) target_compile_definitions(mylib PRIVATE DEBUG_MODE1) target_link_libraries(mylib PUBLIC fmt)這里面的PUBLIC、PRIVATE、INTERFACE是最容易繞暈的地方。我提供一個我常用的理解方式先想象這個庫自己編譯時需要什么再想象使用者還需要什么。如果某樣東西既被庫自己用、又被子項目用那它一定是 PUBLIC。如果庫自己編譯時需要、但使用庫的人根本不需要知道那就是 PRIVATE。如果庫編譯時根本不需要純屬給別人用的那就是 INTERFACE。實際操作中經(jīng)常有人把所有東西一律寫成 PUBLIC這在單目錄小項目里也許沒什么問題但一旦項目復雜起來就會發(fā)生“沒必要地強依賴傳播”——比如內部用了某個私有實現(xiàn)庫結果把所有依賴這個庫的消費者都帶上了。正確的做法是默認從 PRIVATE 開始當出現(xiàn)“下游也需要”的明確需求時才升級為 PUBLIC。3.3 生成器表達式解決配置差異生成器表達式是 cmake 里最強大也最容易忽略的語法。它的形態(tài)是$...在配置階段會被求值在不同構建類型、不同平臺上產生不同內容。最常見的用法是區(qū)分 Debug 和 Release 編譯宏target_compile_definitions(app PRIVATE $$CONFIG:Debug:ENABLE_DEBUG_LOG $$CONFIG:Release:NDEBUG )這行代碼的意思是如果當前配置是 Debug 則定義ENABLE_DEBUG_LOG如果是 Release 則定義NDEBUG。在單一配置生成器如 Makefile下這個宏由CMAKE_BUILD_TYPE決定在多配置生成器如 VS下同一個構建目錄可以隨時切換 Debug/Release生成器表達式依然正確生效。單獨一個$CONFIG可能看不出多大威力一旦你要區(qū)分平臺$PLATFORM_ID、編譯器$CXX_COMPILER_ID、甚至可以判斷某條依賴是否存在再決定加不加某個鏈接庫生成器表達式幾乎成了唯一的優(yōu)雅解法。我用一個實際場景來體會它的價值。之前做一個跨平臺庫要同時支持 MSVC 和 GCC有些 warning 只有 MSVC 才會報有些只有 GCC 才會報。如果不用生成器表達式就得針對編譯器寫兩套 if 分支。用了生成器表達式之后一行搞定target_compile_options(mylib PRIVATE $$CXX_COMPILER_ID:MSVC:/W4 $$CXX_COMPILER_ID:GNU:-Wall -Wextra )這種寫法在 CMakeLists.txt 里顯得極簡而且可擴展性極強。4. 一個典型工程從單文件到多目錄完整落地4.1 目錄設計與 CMakeLists 分層隨著項目越來越大單文件 CMakeLists.txt 會變成一團亂麻。普遍的做法是分層寫根目錄一個總控 CMakeLists.txt子目錄各管各的。一個我常推薦給團隊的目錄結構長這樣project/ ├── CMakeLists.txt ├── src/ │ ├── CMakeLists.txt │ └── main.cpp ├── libs/ │ ├── CMakeLists.txt │ └── core/ │ ├── CMakeLists.txt │ ├── core.cpp │ └── core.h └── tests/ ├── CMakeLists.txt └── test_core.cpp根 CMakeLists.txt 只做幾件事聲明最低版本、項目名、設置全局編譯選項、然后用add_subdirectory引入子目錄。cmake_minimum_required(VERSION 3.16) project(MyProject LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) add_subdirectory(libs) add_subdirectory(src) add_subdirectory(tests)子目錄的 CMakeLists.txt 各自維護自己的目標。libs/core/CMakeLists.txt大概長這樣add_library(core STATIC core.cpp) target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})而src/CMakeLists.txt則負責鏈接這個庫add_executable(myapp main.cpp) target_link_libraries(myapp PRIVATE core)這套做法的最大好處是職責清晰。根目錄不關心具體細節(jié)子目錄不關心全局配置。新人看到某個目錄打開這個目錄的 CMakeLists.txt 就能理解它編譯什么、鏈接什么。另外add_subdirectory天然地把不同目錄的目標放進同一個構建樹里目標名就是你在構建系統(tǒng)里可以直接引用的名字不需要手動去拼路徑。4.2 處理好第三方依賴find_package 的兩種模式真實項目幾乎不可能完全不依賴第三方庫。這時就要用到find_package。它的使用形態(tài)很統(tǒng)一find_package(OpenCV REQUIRED) target_link_libraries(myapp PRIVATE ${OpenCV_LIBS})find_package背后有兩種查找路徑理解它們能節(jié)省大量排查時間。第一種叫 Module 模式。它是利用 cmake 內置的FindXXX.cmake模塊在某幾個預定義路徑里去找?guī)?。大多?shù)系統(tǒng)庫都走這種模式比如find_package(Threads)、find_package(CURL)。這種模式里cmake 會設置一些約定變量比如常見的XXX_FOUND、XXX_INCLUDE_DIRS、XXX_LIBRARIES。第二種叫 Config 模式。庫在安裝時會攜帶一個XXXConfig.cmake或xxx-config.cmake配置文件里面對這個庫的目標、版本、依賴關系做了聲明。cmake 通過搜索CMAKE_PREFIX_PATH、系統(tǒng)默認安裝路徑等地方來找到這個配置文件?,F(xiàn)代庫越來越傾向于走 Config 模式因為信息完整而且可以直接暴露給target_link_libraries使用。如果庫始終找不到第一步不是改路徑而是確認你裝的庫版本里真的有沒有對應的 CMake 配置文件。有時候你從 apt 安裝了一個庫但只裝了運行時和頭文件沒裝-dev包配置文件自然就沒有。裝 Linux 下的庫務必把名稱帶dev的那個包一起裝上。find_package的REQUIRED關鍵字強烈建議寫上。少了它找不到庫時 cmake 只會靜默地跳過后續(xù)用到這個庫的代碼會在編譯階段報出一堆看不懂的錯誤排查難度成倍增加。寫上REQUIREDcmake 會在配置階段直接報錯并告訴你到底是哪個包沒找到省心得多。4.3 安裝與導出讓庫可以被別人 find_package如果你開發(fā)的是庫光能編譯出自己的目標還不夠還得讓別人在項目里通過 find_package 用上。這套玩法叫安裝規(guī)則與導出目標。核心就兩條命令。第一條是install(TARGETS ...)把庫和頭文件安裝到指定目錄。第二條是install(EXPORT ...)把構建時的目標信息導出到一個配置文件里。下面這個例子很典型add_library(mycore STATIC core.cpp) target_include_directories(mycore PUBLIC $BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} $INSTALL_INTERFACE:include ) install(TARGETS mycore EXPORT MyCoreTargets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib ) install(DIRECTORY include/ DESTINATION include) install(EXPORT MyCoreTargets FILE MyCoreConfig.cmake DESTINATION lib/cmake/MyCore )這里的$BUILD_INTERFACE:和$INSTALL_INTERFACE:又要用到生成器表達式了編譯階段把頭文件路徑指向源碼目錄安裝后則指向安裝目錄下的 include 路徑。這種設計我在實際維護公共庫時用得很頻繁一條規(guī)則通吃“開發(fā)時引用”和“安裝后引用”兩種場景根本不需要操心頭文件路徑對不上。5. 構建配置、編譯器差異與并行構建優(yōu)化5.1 構建類型單配置與多配置生成器cmake 的構建類型是另一個高頻困惑點。有人問為什么我在 VS 里能直接切 Debug/Release但命令行卻要傳-DCMAKE_BUILD_TYPERelease這其實取決于你用的是哪種生成器。Makefile 和 Ninja 屬于“單配置生成器”一次配置只能選定一個構建類型所以必須通過CMAKE_BUILD_TYPE在配置階段指定。VS 和 Xcode 屬于“多配置生成器”一個構建目錄內可以同時存在 Debug、Release、RelWithDebInfo 等配置構建時再用--config選項指定用哪個。如果你當初用默認方式在 Windows 上跑了cmake -S . -B build大概率生成的是 VS 工程。這時指令就要寫成cmake --build build --config Release我看到過不少人在 Windows 命令行下執(zhí)行cmake --build build死活出不來 Release 程序最后才發(fā)現(xiàn)默認生成的是 Debug。所以閱讀構建日志時一定要先確認自己用的生成器類型然后對癥下藥。構建類型的差異還會影響優(yōu)化級別。Release 默認-O3Debug 默認不帶優(yōu)化、帶調試符號除此之外某些宏定義比如NDEBUG也是隨構建類型切換的。我自己做性能排查時經(jīng)常要在同一個功能下各自編一版 Debug 和 Release 對比行為對這種差異尤其敏感。5.2 在 Windows 下用 cmake 配合 VS棧大小怎么設置這個熱詞問的人特別多。VS 里直接改棧大小可以通過鏈接器屬性面板但如果你用 cmake 管理項目就得通過鏈接選項傳給 MSVC。否則每次從 cmake 重新生成工程手動改的屬性都會丟失。MSVC 的鏈接器參數(shù)里/STACK:reserveSize,commitSize就是用來控制??臻g的。例如希望主線程棧開到 8MB可以這樣寫if(MSVC) target_link_options(mytarget PRIVATE /STACK:8388608) endif()注意單位是字節(jié)8388608就是 8 * 1024 * 1024也就是 8MB。實際開發(fā)中我遇到過遞歸深度較大的算法把默認 1MB 棧打滿的情況程序在隨機位置崩潰很難復現(xiàn)。用這個選項一下子解決了問題。如果不針對單目標直接在全局設也行set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} /STACK:8388608)但這種方式會影響所有可執(zhí)行文件不夠精細。我更推薦用target_link_options這樣語義清晰后面維護一看就知道是哪個目標需要大棧。另外需要提醒的是這個選項只對 Windows/MSVC 有效Linux 下線程棧大小通常是在代碼里通過pthread_attr_setstacksize控制的或者用ulimit -s調整進程級棧限制兩者機制不一樣不要把 Windows 這一套直接搬過去。5.3 并行構建與增量編譯cmake 構建的性能優(yōu)化很多時候反而是底層構建系統(tǒng)決定的。Ninja 在并發(fā)行和增量編譯上的表現(xiàn)比傳統(tǒng) Makefile 好不少。我自己現(xiàn)在幾乎全部項目都用 Ninja 生成器構建速度快、輸出干凈。指定 Ninja 的方法很簡單cmake -S . -B build -G Ninja cmake --build buildNinja 默認會充分利用 CPU 并行度所以不需要額外傳-j。如果用 Makefile 生成器并行需要顯式指定cmake --build build -j 8這里的-j是并發(fā)任務的個數(shù)通常設為核心數(shù)或略微高一點比較合適。太低了浪費時間太高了容易吃滿內存把機器拖垮。我的經(jīng)驗是 8 核機器用-j 8就挺好16 核機器用-j 16沒必要再往上加。增量編譯同樣是提升效率的關鍵。cmake 的構建系統(tǒng)會自動跟蹤每個目標的依賴文件改哪個文件就只重編哪個文件。但這里有個容易被忽略的問題如果你改了 CMakeLists.txtcmake 需要重新配置才能正確跟蹤新的依賴關系否則可能漏編譯。改完 CMakeLists.txt 后不要只跑cmake --build一定要先重新配置一次。6. 常見問題與排查技巧實錄6.1 經(jīng)典錯誤The following variables are used in this project這個報錯的全稱通常是CMake Error: The following variables are used in this project, but they are set to NOTFOUND。它看起來像天書實際含義很簡單CMakeLists.txt 里引用了某個變量但這個變量在配置階段變成了XXX_NOTFOUND。多半是find_package或者find_library沒有找到對應的庫。最常見的觸發(fā)場景是第三方依賴缺失。比如你寫了find_package(CURL REQUIRED)但系統(tǒng)里壓根沒有裝 libcurlcmake 會在配置階段把CURL_LIBRARY設置成CURL_LIBRARY-NOTFOUND最終報出這個錯誤。排查思路按照這個順序走錯誤特征可能原因排查操作XXX_LIBRARY-NOTFOUND庫未安裝或路徑錯誤先確認find_package(XXX)是否成功再檢查庫文件是否存在XXX_INCLUDE_DIR-NOTFOUND頭文件目錄未找到檢查頭文件是否安裝CMAKE_PREFIX_PATH是否指向正確前綴報錯出現(xiàn)在某個自定義變量CMakeLists.txt 邏輯錯誤檢查set或message的變量名拼寫是否一致還有個小技巧在 CMakeLists.txt 里臨時加一行message(STATUS XXX_LIBRARY${XXX_LIBRARY})重新配置就能直接在控制臺看到變量到底被解析成了什么。這個辦法在排查任何“我覺得我明明設置了但它還是 NOTFOUND”的場景時都非常有效。6.2 緩存殘留與“我改了都沒生效”這個問題幾乎每個用 cmake 的人都會撞上幾次?,F(xiàn)象是改了某個-D參數(shù)或者改了系統(tǒng)某個環(huán)境變量甚至已經(jīng)重新執(zhí)行了 configure但 cmake 依然使用舊的值。造成這種情況的根源是 CMakeCache.txt。cmake 在第一次配置時會把所有緩存變量記錄下來。后續(xù)重新配置時如果你沒有在命令行里明確指定某個變量cmake 會沿用緩存里已有的值而不是重新去探測。這在設計上是故意的目的是加快配置速度但也造成了很多誤判。處理辦法就一句話當你懷疑“改了沒生效”時直接把 build 目錄刪掉重建。rm -rf build cmake -S . -B build這個操作我每周都會做上幾次尤其是從別人那里接手一個構建目錄時。刪除緩存雖然會讓配置時間變長不少但能保證一切從干凈狀態(tài)開始排查思路會清晰很多。如果你舍不得刪整個構建目錄也可以只刪 CMakeCache.txt。但需要注意有些生成文件是在配置階段根據(jù)舊緩存生成的單獨刪緩存偶爾會造成不一致所以還是整個目錄重建最穩(wěn)妥。6.3 交叉編譯場景下的 toolchain 文件不只是嵌入式項目現(xiàn)在不少人也會在 Windows 上開發(fā) Linux 的產物或者在 x86 的機器上編譯 ARM 的代碼。cmake 對這類場景的標準解法是編寫一個 toolchain 文件然后通過-DCMAKE_TOOLCHAIN_FILE指定。一個典型的交叉編譯 toolchain 文件大概長這樣set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g) set(CMAKE_FIND_ROOT_PATH /path/to/arm/sysroot) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)這份文件的核心作用是告訴 cmake 三件事目標平臺是什么、用什么編譯器、去哪里找目標環(huán)境的頭文件和庫。CMAKE_FIND_ROOT_PATH在這里尤其重要它讓find_package去交叉編譯的 sysroot 目錄里找依賴而不是去宿主機的系統(tǒng)目錄里找。否則很容易出現(xiàn)棋差一著的錯誤比如在 x86 機器上找到了 x86 版本的 OpenSSL鏈接出來的 arm 版本程序直接運行失敗這在嵌入式開發(fā)里是典型的配置陷阱。這類問題排查起來比較陰間最好的方法還是從第一步就正確使用 toolchain 文件并保證CMAKE_FIND_ROOT_PATH指對。6.4 常見構建錯誤速查表報錯信息可能原因解決思路No CMAKE_CXX_COMPILER found編譯器未安裝或未在 PATH 中確認 g/clang 可用重新配置CMake Error at ... add_library cannot create target目標名與已有庫沖突檢查項目內是否重復定義同名目標Cannot specify include directories for imported target對 IMPORTED 目標錯誤使用了 include 指令改用 target_link_libraries 或 INTERFACE 屬性The CXX compiler identification is unknown編譯器無法識別或配置被緩存污染刪除 build 目錄后重新配置ninja: error: unknown argument語法問題或者生成器與 cmake 版本不匹配檢查構建命令改用cmake --buildundefined reference to ...鏈接庫順序或庫未鏈接檢查 target_link_libraries確認目標傳播屬性正確最后再分享一個小技巧如果你要給 cmake 生成一個“干凈利落”的編譯數(shù)據(jù)庫用于編輯器或 IDE 的代碼索引可以在 CMakeLists.txt 里加一行set(CMAKE_EXPORT_COMPILE_COMMANDS ON)配置完成后構建目錄下會生成compile_commands.json這里記錄了每個源文件用什么樣的編譯選項。我給 clangd 指向這個文件VSCode 或 vim 里的補全、跳轉和編譯選項就和 cmake 完全一致了。平時寫代碼時再也不用擔心“IDE 里不報錯實際編譯卻報錯”這種尷尬局面。這也是我對 cmake 最深的體會它本質上不是一個與你日常寫代碼割裂的環(huán)節(jié)而是連接源碼和工具鏈的橋梁。多花點時間把構建邏輯理順后面幾年省下的時間絕對值得。平時養(yǎng)成“讀 CMakeLists.txt 時多問一句為什么這樣寫”的習慣踩坑的次數(shù)會少很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
热久久91| 99色丁香婷婷综合网| 欧美激情综合色丁香婷婷五月天| 婷色综合| 啪啪色区| AV堂狠狠干| 天天狠天天叉| 婷婷五月天com| 色亭亭影园| 天搞天天天天天| 99视频在线| 五月丿香啪啪| 久/久精品99看9| 亚洲欧美综合7777色婷婷| 伊人久久大香网| 色五月婷婷激情基地| 无套内射极品大美女| 99久久婷婷国产综合亚洲| 无码色色| 日韩AV在线免费| www激情网| 丁香婷婷天堂| 色婷婷激情四射视频| 九九热啪啪| www五月天com| 人妻av在线| 激情网五月天| 六月丁AV| 婷婷天堂综合| 日本精品人妻无码77777| 婷婷五月精品在线| 99人人干人人| 少妇AB又爽又紧无码网站| 五月久久亚洲| AV成人在线播放| 婷婷黄色| 五月婷婷综合久久| 91人妻色色网| 五月天婷婷色播综合在线| 久热播这里只有精品| 色噜久| 五月丁香色综合| 亚洲色色色色色色色色色| 色婷婷a| 日本狠狠干| 激情五月天之六月婷婷| 成人毛片在线免费观看| 亚洲国产精品VA在线看黑人| 激情五月天啪啪| 天天做天天爱天天摸| 日韩成人影片网站| 婷婷九月色| 丁香婷婷六月天| txt五月激情四射网综合俺也来了 五月天婷婷丁香人人操91 | 99久久婷婷国产综合精品电影| 久久激情五月婷婷| 天天操夜夜夜拍拍拍| 狠狠色狠狠色综合日日91| 日本在线视频播放91| 超碰碰碰碰| 精品久久99码| 在线可以看的av网址| www.91在线观看| 桃色成人网| 激情婷婷啪啪| 狠狠干总合| 五月婷婷精品视频| 被男人添B超爽视频| 《蜘蛛女》梁铮1995| 久久久久久久综合狠狠综合| 性爱五月丁香| 日本久碰| 亚洲久热| 九九色欲网| 激情五月丁香激情综合网| 色综合中文| 99爱在线精品视频免费观看| 极品另类| 天天综合中文| 日日操,夜夜撸| 五月丁香激情婷婷| 色综合香蕉视频| 亚洲无AV在线中文字幕| 五月婷婷中文字幕| 日韩在线9| 色播丁香婷婷五月激情| 久热这里只有精品6官网亚洲| 久久激情婷婷| 99re视频在线精品| 懂色av粉嫩av蜜臀av| 激情丁香婷婷| 综合久久综合久久| 97精品自拍视频| 西瓜美女a片| 亚洲色色五月天| 婷婷五月综合国产精品| 国产精品成人AV在线观看春天| 九九九九国产| 色色免费网站| 婷婷五月六| 色青青视频| 99黄色性生活| 免费看无码视频A级| 狠狠婷婷综合| 激情综合网婷婷五夜| 色婷婷丁香五月| 一级二级香港秋霞欧美欧美秋霞| 亭亭色天香| 六月婷婷香蕉| 久久婷婷艹| 97精品人人A片免费看| 99色在线观看| 色五月天在线观看| 国产成人综合网| 日韩色五月| 四色五月婷婷| 婷婷九月丁香| 精品99在线| 一本久道综合色婷婷五月| 久久在线视频只有这里有精品| 国产激情视频在线观看| www超碰| 99色.com| 亭亭丁香97| 激情操逼婷婷| 丁香婷婷综合喷| 国产欧美精品AAAAAA片| 精品人妻在线免费观看| 91聚色综合网| 97久操| 另类少妇人与禽zOZZ0性伦| 五月丁香六月激情在线| 色婷婷影院| 五月激情综合网| 久久久久久人妻| 99re在线观看| 久色五月| 久久九九国产精品怡红院| 噜噜久| 色情综合网| 五月丁香激情综合六月涩涩爱| 日日操,日日爽| 天天综合情| 99热婷婷| 色综合五月婷婷狠狠干| 午夜不卡成人一区二区| 婷婷五月天综合小说网| 日韩在线一级| 久久久久人妻| 91九色PORNY肉丝在线| 激情综合网婷婷五夜| 色婷婷在线视频| 噼里啪啦在线观看免费完整版视频 | 深爱五月激情五月| 爱久综合| 欧美成人精品A片免费一区99| 五月婷婷无码| 日本97在线看片| 在线亚洲综合| 婷婷五月色| 五月婷婷五月丁香综合| 五月丁香激情在线| 大香蕉久久婷婷| 久久人妻视频| 五月天激情网站| 免费看欧美成人A片无码| 这里有精品| 欧美婷婷色| se婷97| 丁香五月网| 久久精品婷婷| 亚洲五月情| 婷婷 色 丁香 夜| 久久婷婷综合网| 婷婷丁香六月天| 爱久久小说下载网| 狠狠干综合网| 久久加勤综合| 影音先锋一区| 日本在线视频手机播放五月婷| 五月婷婷色吧!| 婷婷五月天第三页| 91日本在线观看| 亚洲亚洲人成综合网络| 亚洲成人在线综合| 婷婷操逼网| 五月丁香六月婷婷欧美综合| 天天色亚洲| 国产日产亚系列精品版优势| 丁香九月综合激情| 中文字幕色色色| 性色婷婷| 丁香花综合永久入口| 国产精品操| 亚洲天堂AV免费片| 丁香婷婷九月| 欧美综合五月天婷婷tin| 99碰视频| 久久机热这里只有精品| 丁香婷婷色五月| 亚洲黄色网址| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | #NAME?| 色婷五月天| 久久久五月婷婷| 久热欧美| 日韩伊人大香蕉| 国产伊人五月天| www夜夜操com| 国产肥白大熟妇BBBB视频| 免费播放片大片| 五月丁香啪啪激情| 99精品在线观看| 精品自拍97| www.91色| 色五月五月婷婷| 久久五月天婷婷| 9999热在线观看| 狠狠人妻久久久久久综合丁香| 亚洲免费观看高清完整版AV线| 亚洲欧洲中文日韩久久AV乱码| 大香蕉操操| 综合深爱五月| 99re在线播放| 99这里有精品久久97| 丁香五月激情性色郤| 99啪啪视频| 五月激情久久| 五月丁香网中文字幕| 国产成人高清| 婷婷综合色网| 久久少妇视频| ai97re99一本| 97五月天婷婷| 国产精产国品一二三在观看| 色色色视频| 97婷婷狠狠| 4399精品一区二区| 婷婷爱五月天人人爱| 婷婷五月天激情小说| 热久91| 九九热视频首页/这里只有精品| 国产无套精品一区二区| 天天肏在线视频| 狠狠做五月婷婷| 六月丁香激情网| 九九亚洲无码| 99热免费| 久久女人九九| 婷婷激情小说| 九九热99精品| 中文在线视频久9| av婷婷丁香 六月| caop在线视频| 任你艹| 五月婷婷中文字幕| 全高清无码视頻| 色婷婷久久| 99ri视频在线观看| 九九热99精品在线| 婷婷五月天久草在线| VA国产在线综合网站| 99re这里| 99er这里只有精品视频| 超碰在线看| 婷婷六月色| 五月天伊人久久久久| 久久五月天丁香| 亚洲色A| 免费视频WWW在线观看网站| 思思99热热热99| 成人网在线视频| 国产综合81p| 婷婷五月18永久免费视频| 99九九精品视频推荐| 五月丁香综合网色欲| 99精品在线观看| 天天做天天视天天谢| 这里只有精品视频免费在线观看| 色亚洲视频| 99激情| 久久狠色噜噜狠狠狠狠97| 99综合视频| 停停色综合伊人| 免费视频WWW在线观看网站| 天天摸,天天爽| www.色五月| 激情六月丁香综合| 激情婷婷狠狠干综合| 天插天啪天啪天啪| bukadeavzaixian| 亚洲五月花| 色噜久| 久久综合影院 | 午夜色丁香| 亚洲最大视频网站| 婷婷丁香五月麻豆| 狠狠五月天婷婷| 狠狠干最新地址| 六月婷婷视频| 久久五月视频| 就爱干 在线| 97人人妻人人艹| 99免费在线| 久久艹99| 777影视理论片大全在线观看| 久久婷婷五月天激情| 免费无码毛片一区二区A片 | 国产古装妇女野外A片| 色婷婷五月天堂资源| 国产探花一片区| 综合99视频| 丁香五月综合高清在线| 国产乱轮一区二区三区| 婷婷五月丁香综合激情| 天天插夜夜爽| 91超级碰在线| 伊人综合网站| 99操免费视频| 天天插夜夜爽| 996er热| 五月天激情国产综合婷婷婷| 99热这里只有精品青草| AV成人在线播放| 色玖玖| 五月天综合在线观看| 日韩无码性爱| 男妓跪趴把舌头伸进我的嘴巴| 五月婷婷六月开心| 99re熱| 久久3级片| 成年人最刺激的综合网| 综合久色五月| 丁香五月婷婷激情四射| 五月丁久久| 99这里只有精| 丁香伊人综合| 九九久久五月天| 国产偷人爽久久久久久老妇APP| 色色色色网| 九九热这里只有精品首页| 久久婷婷艹| 俺去也综合| 日本操逼九九九九58日本操逼| AAA久久久| 任你搞免费视频观看| 五月六月播婷婷| 伊人喵咪a V| 成人丁香五月天| 99热久草| 婷婷五月天va| 99ri国产| 欧美日韩成人在线网| 丁香婷婷五月| 夜夜躁爽日| 天天爽天天弄| jiujiu热在线视频| 久超超碰| 一本色综合色| 99久热| 欧美色久| 四色五月婷婷| 丁香美女主播视频在线观看| 极品色丁香| 中文字幕黄色电影网址| 大香蕉婷婷婷| 国产乱子轮XXX农村| 国产精品成人AV在线| 国语精品探花| 日逼免费视频 | 亚洲精品99| 婷婷激情社区| 亚州性爱99| 五月天婷婷三级黄| 久热伊人| 五月天丁香网| 欧美久久婷婷| 色婷婷色99国产综合精品| 欧美精品A片一区在线观看| 一本色道久久88加勒比| 亚洲国产精品二二三三区| 91丨九色丨大屁股| 97操视频| www.婷婷五月| 亚洲成人一区| 欧美熟女99| 天天噜| 色色色色色色色色综合网| 综合激情网| 开心久久五月天| www.婷婷亚洲基地| 伦乱天堂| 91一起艹| 欧美黑人大吊| 入口五月婷婷六月香| 亚洲婷婷久久综合| 991精品在线视频| 丁香五月最新网址| 婷婷五月天丁香社区| 午夜福利成人AV91| 婷婷玖玖丁香| 色五月婷婷91在线| 99热99草97| 色婷婷第四色| 欧美色碰| 噜噜视频| 夜夜骑夜夜撸| 超碰免费人人| 国产偷人爽久久久久久老妇APP| 天天插天天干| 无遮挡国产高潮视频免费观看| 性爱综合网| 99热99色| 影音先锋91网站在线观看| 精品国产AV色一区二区深夜久久 | 午夜精品久久久久久久爽| 天天插天天插| 久久久国产精品黄毛片| 五月婷婷色色爱| 99热在线观看成人| 天堂在线婷婷| 色综合久久无码| 99玖玖人人| www.99热精品| 狼人婷婷综合| 九九热只有这里精品| www.25五月婷婷| 97人人干| 久久网思思| 99热在线观看免费| 新激情五月天天在线网| 97久久视频| 99久在线精品99re8热| 天天干夜夜谢| 激情内射人妻1区2区3区| 婷婷丁香九色| 国产性爱一级| 久久老码第一| 夜夜操天天爽| 97色热| 极品人妻VideOssS人妻| 婷婷狠狠干| 五月激情小说| 激情99| 婷婷激情五月综合| 少妇性BBB搡BBB爽爽爽电影| 婷婷丁香黄色| 色综合色| A网在线欧洲| 五月丁香在线| 99操视频| 婷婷色色综合| 亚洲综合无码| 激情婷婷丁香色情五月天| 色情五月天A片| 色播五月综合网| 涩综合婷婷| se色婷婷视频| 久综合色| 丁香五月天啪啪激情综和网| 操操天堂| 色婷婷六月| 国产综合婷婷| 狠狠色五月| 天天射影院| 五月天社区| 五月婷婷婷色| 那里有AV网址| 日日操日日撸| 北京熟妇搡BBBB搡BBBB| 9九色首页| 九九热在视频| 久久99免费视频| 久久婷色| 玖玖综合玖玖| 婷婷六月开心网| 国产精品爽爽久久久久久| 大香蕉久| 亚洲精品亚洲人成人网| 26uuu成人网| 久久综合激情| 伊人婷婷五月天av| 噜噜视频| 欧美丁香五月| 婷婷日日天天| 五月色婷婷综合| cao视频,现在观看| 日本本土色网第一区| 天天日本夜夜谢| 99视频自拍| 99草视频在线观看| 狠狠久综合| 日本99热| 大香蕉九九热| 久久性爱视频这里只有精品| 国产亚洲在线观看| 欧美在线ee日韩| 色欧美影院| 婷婷丁香人妻久久在线观看| 中文字幕永久免费| 九九九九九九九九九九九九九九九九九九九在线视频 | 9久国产| 秋霞AV吧| 亚洲色情免费网| 久久 婷婷 五月天| 伊人久热91| 色五月五月丁香| 99热6这里只有精品| 中文字幕精品推荐免费在线观| 五月婷婷xxx| 亚洲VA口| 操日本色| 五月丁香在线婷婷美女| 国产国产乱老熟女视频网站97| 操B五月天| 亚洲九九视频| 亚洲视频久久| 五月成人天| 夜夜嗨一区二区三区直播内容 | 婷婷丁香五月视频| 久久婷婷亚洲五月天| 成人av免费观看| 金品在线视频99| 伊人日日干| 久久色情| 狠狠操之狠狠操| 另类激情五月| 97在线观看| 天天激情视频| 国产AV一区二区三区日韩| 97色碰| 五月伊人网| 婷婷丁香精品视频在线观看| 欧美婷婷五月天综合| 日本欧美成人片AAAA| 国产精产国品一二三在观看| 五月丁香综合啪啪| A A色色| 色五月婷婷久久| 久久一级片| 岛国AAAV| 色9999日韩国产| 99精品自拍| av色婷婷| 久久久久er热| 欧洲99视频在线| 国产成人高清| 99ri精品视频在线观看| 婷婷五月无码| 97干在线播放| 99热啪啪| 久久久久久久久久久久久久人妻视频| 日日干日日| 人人舔人人色人人高潮| 91性交在线播放| 青青福利网| 337久久| 一级操逼内射在线视频| 婷婷丁香五月天综合激情| 丁香六月毛片| 2021日韩无码| 五月丁香五月婷婷| 五月婷婷激情性爱| 五月丁香网站| 亚洲色综合| 成片免费观看视频大全| 99热这里有精品24| 2022久久婷婷| 色婷| 热久久99视频| 精品影院| 激情深爱综合网| 在线sebiav精品视频| 激情五月综合婷婷| av激情在线| 另类激情综合| 五月丁香婷婷久久| 涩玖玖免费视频| 原琪琪色影院| 色综合色色| 国外亚洲成AV人片在线观看| 亚洲欧州色情在线观看| 在线播放人妻| 综合啪啪| 婷婷另类开心| 丁香六月天婷婷| 女同激情久久av久久| 丁香五月婷婷六月婷婷| 五月天婷a在线| 五月亭亭网成人在线视频| 三级三久久线久久99久目本WW| 99热综合| 人人操人av| 黑人无码一区| 综合六月激情婷婷| 精品九九网| 丁香 久久| 婷婷伊在线| 67194线路二在线观看| 五月天婷婷在线观看| 九九热99精品| 婷婷丁香18| 成人婷婷五月| 色九亚洲| 婷婷激情五月呦呦| 天天在线XXX| www.黄色片-久久成人国产精品在线播放-999AV| 日本婷婷| 日本成人小说婷婷六月| 99激情在线| 丁香五月激动深爱欧美| 大香蕉婷婷色| 五月深爱网| 狠狠干婷婷| 20253AV| 色婷婷丁香五月天| 五月婷婷影| 天天干,天天舔| 中文字幕不卡网站| site:pnnrt.com| 婷婷五月亚洲一本在线丁香| 思思久ren热| 九九色天堂| 99精品偷自拍| 精品婷婷| 天天草天天摸| 全国最新疫情| 超碰在线人妻| 丁香五月手机视频| 最近中文字幕2019视频1| 超碰免费99| 激情五月天色婷婷| 性爱在线播放av| 久久久久久久8| 新激情五月天| 99啪啪| 深爱激情丁香| 天天草天天日| 人妻乱码久久久| av在线激情| 色婷婷av综合网| 六月丁香五月婷婷| 久久五月丁香| 六月婷婷视频| www99热| 欧美成人日韩| 婷五月天| 欧美激情综合色综合| 久久久久久久综合狠狠综合| 色情五月天丁香社区| 色五月天 丁香| 夜夜穞天天穞狠狠穞AV美女按摩| 九九黄色网| 大香蕉伊人爱在线| 欧美婷婷五月天| 久久婷婷成人视频| www,久久久| 婷婷 伊人 久久| 超碰丁香五月| 丁香五月婷婷老师网站| av大片在线| 亚洲精品字幕在线观看| 99re这里| 久久九九综合| 热久久91| 996热re视频精品视频| 五月色婷婷综合| 夜夜操天天爽| 欧洲免费视频色| 色婷婷丁香AV综合| 四五月婷婷| 99激情视频热| 婷婷中文字幕| 天天日天天做天天舔| 91色九| 超碰在线观看9| 狠狠色噜噜狠狠亚洲A∨| 激情AV综合| 超碰成人公开| 激情图片亚洲| 玖玖91| 欧美日韩成人h| 久久加勤综合| 日本97人人| 亚洲成人av在线观看 | 久久这里只有精品视频1| 丁香五月六月欧美| 丁香六月婷婷综合啪啪| 人人播| 五月丁香大相交| 久久亚洲婷婷| 久久99热这里只频精品6学生| 激情五月综合网| www.9操| 第四色色六月色综合| 啪啪啪丁香五月| 狠狠综合久久综合| 久99久99精品免| 丁香五月人妻| 国产亚洲色婷婷久久99精品91| 99热只有精品综合| 丁香五月丐人妻| 97干婷婷五月天| 美女100%露全身无挡网站| 五月丁香成人| 99热这里只有精品国产精品| 日日杆天天| 国产免费一区二区三州老师F1F1| 五月天久久久| 大香蕉伊人久久| 国精产品一区一区三区免费视频| 五月天啪啪网| 丁香婷婷五月综合影院| 久久精彩综合视频| 99热在线中文字幕| 六月婷婷在线视频| 久久婷婷色色| 色婷婷激情| 亚洲狠狠干| 九九视屏| 黄桃AV无码免费一区二区三区| 日韩AC在线免费观看| 五月天激情网址| 亚洲婷婷丁香五月在线| 天天色官网| 性生活视频98791| 女人高潮内射99精品| 超碰在线资源| 六月丁香花婷婷| 丁香婷婷十月| 操一区| 久久人妻少妇嫩草AV| 激情五月婷婷啪啪| 久久久久婷婷五月热综合| 亚洲婷婷激情五月天| 4399在线日本A片| 亚洲日本韩国| 亚洲色图45p| 激情综合网激情五月网| 久色| 99热在线观看| 九九九九综合| 亚洲综合丁香五月天| www99热| 婷婷九九色| 五月丁香六月在线欧美| 99热费观看| 五月丁香亭亭| WWW·色色色·COM| 欧美毛片www| 超碰在线精品| 任你干aa| 亚洲视频色色| 久久99激情| 91蝌蚪窝视频在线| 五月丁香啪啪网| 99久久久| 色色亚洲| 97人人干人人操| 丁香五月婷婷色偷偷| 日韩人妻无码专区| 9l视频自拍9l视频自拍九色学生| 欧美综合五月丁香六月婷| 五月丁香婷婷色| 亚洲色图啪啪| www,五月丁,com| 这里只有精品免费视频| 色色色色区| www.五月天。com| 天天插综合| 91好好热日本在线| 五月天婷婷五月| 九热视频| 91精品婷婷国产综合久久| 另类五月激情| 爱99干99| 精品国产人人爱人人| 成人综合AV| 欧美偷偷操| 亚洲精| 大香蕉人妻| 97操视频| 超碰在线免费9| 亚洲视频在线网| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 日韩中出视频| 婷婷综合五月激情| 天天色视频| 99热青青草| 久久人妻精品| 日本在线wwww| 99视频只有这里精品| 国产婷婷色综合AV蜜臀AV | 9久热| 久久与婷婷| 丁香久月| 久热免费| 99热www| 婷婷丁香五月高清| 刘玥精品一区| 五月涩涩网| 51精品国自产在线| 天天更新天天亚洲| 成人做爰A片免费看网站找不到了| 99热久| 成人av免费观看| 伊人婷婷大香蕉| 色婷婷超碰| 国产激情在线| 色色色五月婷| 丁香激情四射| 亚洲av成人在线| 五月天婷婷香蕉狠狠超碰综合| 99精品视频在线观看| 99热999| 五月天婷婷久久| av在线不卡播放| 久久综合五月| 99热欧美精品| 99热1| 91超碰在线播放| 婷婷亚洲综合| 婷婷色激情网| 婷婷伊人綜合中文字幕| 这里只有精品99视频| 色色五月婷| 色青青五月| 五月婷婷色欲| 五月丁香婷婷激情澎湃四射| 婷婷色色宗合网| 99视频精品在线| 欧美日韩成人在线免费| 色私五月婷婷| 九九RE视频在线精品| 99热这里只有精彩| 思思99热在线| 一本色道久久88加勒比| 婷婷五月激情在线| 中文字幕久久婷九女同| 人人草人人舔| 五月天色色网站| www.久久久久| 人人干AV| 色色五月丁香婷婷综合| 香蕉操亚洲| 国产亚洲99久久精品| 五月天激情小说| 久久精品永久免费| 97操男人的天堂| 丁香五月欧美色综合| 九九99在线免费在线观看视频| 久热九九| 五月香六月婷| 色五月婷婷91| 丁香五月电影| 色婷婷六月天在线| 丁香激情五月| 天天操夜夜操| 97五月天婷婷| 欧美99视频| 亚洲激情av| 久99热| 26.uuu丁香五月婷婷| 久久五月天综合| Va另类视频| 欧美婷婷精品激| 第四色五月天| 五月天夜夜爱夜夜操| 97婷婷丁香五月天激情图片| 人人爱国产| 久久人妻情侣| 99超级碰碰| 丁香五月色情| 99精品小视频| 亚洲一个色| 91色综合久久| 久热伊人| 天天色综合综合| 97操碰视频| 欧美人人草| 国产avapp 网| 99热个人在线| 久热99热| 亚洲欧洲自拍图片专区五月天| 毛片九九九九九九| 另类视频五月天| 婷婷五月天BBw| 婷婷五月综合在线| 日韩99无码| 五月丁香综合激情| 五月天成人在线播放丁香| 91久久综合亚洲鲁鲁五月天| 热思思九九| 香蕉狠狠爱视频| 国产精品色一哟哟| 欧美在线干| 亚洲图片 丁香婷婷| 日本一级一级一级一级| 天天爽天天摸| 涩涩五月天综合| 色色色色色综合| 一本色道久久88综合日韩精品| 国产激情在线| 99思思热只有在这里看| 五月丁香综合啪啪| 成人在线观看一区| http:色情日本com| 久久婷婷激情| 国产午夜一区二区三区| 思思热99er在线视频| 超级碰碰碰91| www.wuyuetian啪啪| 99日韩| 久久免片| 新五月天婷婷激情电影| 97碰在线视频| 色九九丁香九月色九九色| 青柠影视免费高清电视剧| 91丨九色丨白浆秘| 丁香五月色欲| 69婷婷丁香午夜| 九九色中文| 丁香久月婷| 亚洲一二三网| 国产成人精品123区免费视频| 97丁香婷婷| 天天干天天干天天操| 婷婷性爱无码视频| 激情文学 综合 色| 色女人久久| www.一起草av| 性爱激情五月| 黄桃AV无码免费一区二区三区| 午夜色婷婷| 激情五月丁香六月综合AVXXXX| 天天天日天天天干| 天天日狠狠| 大香蕉av在线| 日本美女上人| 9 99免费视频| 丁香香蕉婷婷| 国产av第一专区| 丰满少妇猛烈A片免费看观看| 婷婷综合激情| 91Chinese在线| 丁香婷婷色情| 色色色色色网| 日日操夜夜骑| 99爱在线视频观看| 亚洲色vA| 天插天啪天啪天啪| 天天拍夜夜爽日日| 五月天六月天| 包操45分钟网站| 亚洲婷婷五月天在线激情综合网| 日日干天天射| 黄色五月婷婷| 五月丁香亭亭操逼| 婷婷激情六月综合| 久99热在线观看| av激情在线| 久久久WWW| 91婷婷色 | 丁香五月亚洲综合丝袜| 成人无码髙潮喷水A片| 日本99久久| 婷婷丁香六月| 五月丁香婷婷色| 99色色| 免费做A爰片77777| 午夜天堂一区人妻| 精品夜夜澡人妻无码AV| 亚洲亚洲人成综合网络| 噼里啪啦完整版中文在线观看 | 色激情五月| 美女五月天| 色五月婷婷五月| 欧美色婷婷| 9月色婷婷| 丁香五月激情啪| 九九五月天| 91成人性爱视频| 看片视频在线免费日产在线看| 天天日天天爽| 成人做爰A片免费看视频| 国产精产国品一二三在观看| 五月开心播播网| 综合久久婷婷99| 99玖玖视频| 人妻激情视频| 亚洲综合婷婷五月| 五月婷色| 精品国产va久| 婷婷五月天激情AV影院| 噜噜色com| 天天日天天插| 久99| 国产乱人偷精品人妻A片| 亚洲网综合在线| 五月色婷丁香| 五月婷婷久久大香蕉| 99色天堂| 日本丁香五月婷婷| 色了色综合| 亚洲精品永久久久久久| 人人操97| 99熟女| 99综合97| 玖玖婷婷色五月| 久久精彩免费视频精彩免费视频| 色五月天中文字幕| 99热这里只有精品最新地址获取| 蜘蛛女侠2003满天星免费观看| 97人人操| 五月天激情婷婷| 99日本视频在线观看专区| 色欲影香| 激情六月丁香综合| 久久这里只有精品22| 这里只有精品久久| 色婷婷六月| 丁香花社区av| 9月色婷婷| 久久婷婷丁香五月一二三| 伊人网色婷婷五月天| 国产97色在线 | 日韩| 色婷婷激情| 精品综合网在线| 96精品久久久久久久久| 国产成人VA| 99热这里有精力| 五月天色图| WWW嗯嗯啊啊啊啊| 97人人爱人人操| 侠女刀之记忆电影在线看免费| 狠狠插日日干撸| 婷婷五月天色色| 婷婷五月丁香图片人人操| 九九99热| www.91有码.com| 亚洲操人| 日韩AAA| 九艹在线| 成人亚洲精品久久久久| 婷丁香五月天| 涩涩涩婷婷| 婷婷射图| 激情五月天天| www.99久久久| 五月婷婷久草在线视频综合| 国产成人网站在线观看| 色婷婷五月综合激情中文字幕| 人人97碰| 噜噜噜噜噜色| 天天操天天操天天操天天操天天操 | 婷婷五月天熟妇| 色情丁香五月婷婷精品| 亚洲欧洲另类图片| 亚洲美女高潮久久久久久69| 丁香五月冃欧美| 久久六月天| 久久青青日本视频| 99热这只有| 91要啪| 超碰cap| 色五月婷婷激情综合网| 色色a| 激情综合色五月丁香| 久久综合中文| 色婷婷久久综合久色综| 三男玩一女三A片| 99热综合网| 99久久玖玖| 婷婷97狠狠成人网站| 99热国内精品| 99热免费精品| 人妻丰满精品一区二区A片| 97人妻碰碰碰久久香蕉| 婷婷丁香在线播放| 国产毛片精品一区二区色欲黄A片| 偷拍91九色| 深爱激情69热| 欧美69久成人做爰视频| 超碰人人操人人干| www天天色天天射| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 五月天久久www| 79精品视频| 97干干干丁香| 无码四色色色| 久久99久久99精品免观看粉嫩| 欧美人人草草| 无码激情精品色婷婷久久久久| 婷婷五月色播放| 亚洲欧洲午夜成人精品av| 五月婷婷网站| 日本不卡高字幕在线2019 | chaopengdaxiangjiao| 国产日批视频免费播放| 久草视频一,二三四| 啪啪五月综合| 天天天天天久久久久久| 少妇真实被内射视频三四区| 玖玖视频福利| 欧美97色| 久久久久网站| 网站免费一站二站| 玖玖九九9999在线观看视频精品| 色婷婷伦理| 亚洲天堂久久| www.99热日韩.com| 亚洲激情四射| 99人人干| 武则天精品久久| 99丁香五月婷| av在线免费网站 | 日韩在线一级| 狠狠草网| 精品久久艹| 婷婷五月开心六月AV| 六月色丁香中文字幕| 精品二区| 婷婷激情欧美| 色婷婷丁香女女| 夜夜夜叫天天天做| 热91久| 五月天五月婷五月激情网| 国产性av| 99re热视频| 五月婷婷六月激情| 婷婷伊人久久综合| 123日本不卡在线| 激情色情五月天| 欧美日韩成人h| 五月丁香婷婷开心| 精品综合网在线| 99成人免费热视频| 婷婷五月天性爱视频| 干一干xxxx| 久久综合影院 | 亚洲国产色色| 丁香激情五月天| 欧美Va日本Va| 夜夜躁婷婷AV| 五月色婷婷中文字幕| 99色视频在线观看最新| 成人丁香五月| 婷婷五月中文在线| 久久丁香| 天天橾日日橾夜夜橾17| 99@久久@99精品视频| 操操操AV| 色综合香蕉视频| 国产激情在线| 久热大香蕉| 深爱五月婷婷| 色 五月婷婷基地| 亚洲成人精品三区| 婷婷五月免费视频| 九九re精品视频在线观看| 午夜丁香| 亚洲精品乱码久久久久久综合| 国产成人AV| 五月婷婷丁香在线| 日本3级片一区2区| 亚洲人妻av| 五月天另类综合网| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 日韩日比视频在线| www.五月天| 激情AV| 欧美成人一区二区三区在线视频| 婷婷五月深深爱| 五月丁香在线观看99| 日本三级中国三级99人妇网站| 丁香久久AV| 日韩AV成人电影| 99热综合在线| 九九热视频网站| 啪啪啪丁香五月| 91丁香五月| 六月丁香啪| 丁香五月婷婷总啪啪| 色私五月婷婷| 色五月无码| 日本色超碰| 99熟女视频| 六月丁香婷婷天堂| 久热久re| 久久这里精彩免费在线观看| 成人精品视频99在线观看免费| www.五月天。com| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 4399在线观看免费高清黄色视频| 亚洲综合五月天婷婷| 色婷婷五月婷婷五月婷婷五月| 欧美婷婷九月| 天天操天天操天天操天天操天天操| 噜噜噜噜在线| 激情九月天天天天婷婷| 高清无码网址| 26uuu亚洲欧美日本| 91久久久久久久久久久| 91男人操女人视频| 成人在线综合| 婷婷五月永远18免费久久久| 第1影院之五月婷婷| 饮料下药迷倒漂亮女同事强干| 日日夜夜小色哥| 色五月天激情| 色五月色开心开心五月| 成人片在线播放| 夜夜爽天天日| 9久久精品| 天天婬色综合| 99热这里只有精品4| 婷婷色狠狠| 天天摸天天舔在线视频| WWW、日本色丁香、co m| 久久怡红院| 5月婷婷6月六月丁香| 色情·com| 99精品97| 天天揷综合网| 色五月激情网| 天天摸色吧天天摸色吧| 五月婷婷丁香成人网| 成人一区在线观看| 另类小说五月天| 丁香久久综合| 激情综合五月色丁香婷婷 | 激情综合99| 九九成人电影婷婷| 五月天婷婷基地| 啪啪小说五月天| 精品婷婷五月视| WWW.婷婷五月天.COM| avh片在线观看| 色色色欧美| 色婷婷五月在线| 婷婷激情五月天视频在线| 激情婷婷五月亚洲| 超碰人人91| WWW色色色COM| 中国丰满熟女A片免费观| 91九色熟女| 久久人妻视步| 六月香五月婷| 99er6免费视频热播| 日韩在线成人电影| 91夫妻网站九色| 日本九九九九| 色99日韩| 婷婷五月六月丁香| 天天操,天天插| 五月天激日本色情在线| 99色中文| 狠狠色丁香婷婷| 亚洲天堂婷婷| 极品少妇XXXX精品少妇偷拍| 色综合色| 猫咪伊人久久| xx人人xx| 婷婷丁香色情| 日日肏夜夜干| 亚洲色情激情丁香五月|