欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

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
返回資訊列表
综合五月天完整| 这里只有精品免费视频| 97丁香花五月天激情小说| 9l久久久视频| 中字幕视频在线永久在线观看免费 | 婷婷5月久久综合网站| 成人五月天色天堂| 日本久久99| 欧美五月婷婷综合| 在线看AV| 久久久精品免费啪啪国| 日本精品人妻无码77777| 五月婷婷六月情| 色五月丁香婷婷综合| 99久久精品国产色欲| www.久久爱| 站长推荐无码播放| 操操自拍| 婷婷五月天影院| 六月五月婷婷| 国产一二三四五六七八视频| 99热这里只有精品33| 色情五月天视频网| 亚洲经典三级| 色色射| 草五月| 激情狠狠丁香月| 大香蕉九九| 婷婷丁香五月天影院 | 婷婷五月丁香人妻无码高清| 色综合99色| 日日影院 | 色五月激情五月| 99re在线视频| 日本综合久久| 六月婷婷五月丁香| 久草热8精品视频在线观看| 色玖玖综合网| 丁香五月天激情视频| 色婷婷免费视频| 激情五月天开心总和网| 这里只有精品免费| 亚洲乱码w在线观看| 婷婷五月美女直播| 噜一噜在线| 五月丁香在线看| 日韩精品二三区| 激情五月婷婷在线| 美女丁香五婷婷| 五月丁香六月婷婷综合网缴情| 五月激情偷拍婷婷| 五月丁香六月婷婷在线观看| 狼人婷婷久久| 九九成人| 伊人免费视频9| 精品综合网在线| 日韩不卡123| 99热 精品在线| 天天综合天综合久久网| 色五月激情综合网站| www.婷婷五月天.com| 天天摸天天日天天舔| 热的无码综合视频| 影音先锋天天日| 五月天天久久香| 五月天开心婷婷激情网站 | 国产成人精品一区二区三区视频 | 欧美人妻一区二区| 成人 视频免费观看网站| 欧洲亚洲免费视频9| 色丁香五月婷婷| 久久婷婷视频| 大香焦啪啪啪| 51成人| 六月丁香久久| 偷拍视频五月天| www.开心激情| 激情综合无码| 大香蕉色婷婷伊人在线| 狼人狠狠操| 大香蕉婷婷色| 色五月婷婷啪啪五月| 五月天激情社区| 99热亚洲精品| 99热精品在线| 婷婷五月色花丁香社区| 99re6热在线精品视频播放速度 | 99久久久| 激情性爱网站| 综合久色五月| 色色色婷婷| 99操碰| 亚洲超碰在线| 亚洲综合五月天婷婷丁香| 丁香婷婷啪啪| 色播激情| 777.色色| 婷婷大乡焦噜噜| 五月丁香六月色| 九九综合影音先锋| 99综合网| 久久婷婷六月综合综合色| 精品成人在线观看| 色婷婷狠狠久久综合五月| 182TV亚洲| 久久黄色免费视频| 91啪啪视频| 免看黄大片AA | 婷婷五月色惰| 开心五月天激情| 国产白丝在线一区| 婷婷国产五月天17c| jiujiu热在线视频| www.91婷婷| 最近中文字幕大全免费版在线 | 9精品视频在线| 色播五月丁香综合| 思思热视频| 老司机视频lsj爱就色| 丁香婷婷六月激情文学| 亚洲成人无码网站| 色色色五月| 人妻久久久久| 五月激情综合网| 中文字幕日产A片在线看| AA丁香综合激情| 五月天丁香| 99热全是精品| 天天搞天天色综合| ..真实国产乱子伦毛片| www.国产亚洲69ty.久久久久久久久久久久| 天天搞天天色综合| 久久久天堂国产精品女人| 亚洲AV第二区国产精品| 天天草天天摸| 六月色 亚洲| 五六月婷婷| 色五月婷婷九月| 亚洲精品V天堂中文字幕| 色综合中文| 五月丁香六月香综合激情| 丁香五月人妻| jiqingtaose五月天| 成年人最刺激的综合网| 亚洲激情| 色五月天成人| 五月天丁香婷婷社区| 婷婷五月激情在线| 久久久精品免费啪啪国| 九九机热| 97久久精品视频| 六月伊人婷婷| 成人美女网| 夜夜夜天天操| 久久久五月天| 亚洲AV日韩在线观看| 五月天 综合 在线| 强辱丰满人妻HD中文字幕| 亚洲精品国产成人AV在线| 五月天激情网图片| 天堂久久婷婷| 99热精品在线观看| 五月天婷亚洲综合在线嫩草网| 伊人碰碰碰| 色五月婷婷五月天激情综合| 久久草中文日韩欧美| SS丁香五月婷婷| 五月 丁香 欧美| 色色婷婷丁香| 久久久久久久久久久久久久人妻视频| 91chinese在线| 天天爽在线视频| 亚洲综合99| 色婷婷电影网| 国产毛片精品一区二区色欲黄A片| 99er日韩| 中文字幕无线久必| 无码色色色| 五月天婷婷激情在线色图| 五月婷婷在线综合| 99久久精品色老| 99啪啪视频| 久久久18| CHINESE熟女老女人HD视频| 五月网激情| 99热思思| 亚洲激情97五月天| 色婷婷五月综合在线| 思思99久久| 99碰网站| 538在线精品| 丁香五月天婷婷久久综合| 婷婷影视久久| 九月激情综合| 国产色色网址网站| 丁香五月天激情四射网络不好| 蜜桃五月天| 狠狠狠狠青草| 五月天激情亚洲| 激情文学天天| 大香伊人婷婷影院| 欧美日韩成人在线| 丁香六月亚洲综合| 亚洲av免费在线| 99久久99久久综合| 色色性爱视频| 婷婷五月天伊人在线| 色爽干| 亚洲色综合性| 操99| 五月色情婷婷| 91日本在线观看| 色五月视频无码播放| 91伦| 99久久99九九99九九九| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 99热这里只有精品22| 激情婷婷综合| 免费97碰碰| 六月天婷婷| 日本九九热| 五月婷婷草| 夜夜躁爽日日| 婷婷婷婷婷婷婷婷| 五月婷婷成人网首页| 亚洲日本三级片| 久久婷婷国产| 97婷婷五月天| 色婷婷五月基地在线| 免费播放AV| 在线播放中文字幕| 激情六月日韩| 色婷婷在线视频久| 天堂资源欧日浪女在线播放| 色八戒操婷婷| 在线观看国产高清视频免费网站| 天天干天天干天天干| 99re这里只有精品国产99| 国产黄色av| 色五月天电影| 97人妻碰碰碰久久香蕉| 五月丁香亚洲婷婷| 久久婷婷丁香六月天| 日夜操B| 日日夜夜九九| www夜夜操wwwcon| 永久免费视频| 91九色在线观看免费| 六月激情婷婷| 天天肏视频| 99爱精品视频| 五月丁香婷婷婷婷综合网| 伊人激情综合网| 亚洲永远av在线播放| 六月丁香啪啪| 五月婷av| 香蕉婷婷| 337p大胆噜噜噜噜噜91Av| 色婷亚洲| 99精品久久久久久久婷婷久久| 超碰在线看| 欧美日韩国产一区二区| 激情婷婷22月间| 精品一二三区久久AAA片| 操久久网| 99爱这里只有精品免费视频| 操97| 1024人妻| 色五月在线观看| 天天爱综合网| 人人摸人人| 亚洲第一色区| 天天色综合网1| 国产Va视频| 久久人妻久久久久| 天天色综合色色色色色。| 99热精品在线| 26UUU| 99久久99九九99九九九| 久久五月天综合| 免费AV播放| 五月婷婷五月天| 激情六月综合| 五月婷婷激情综合av| 五月丁香婷婷潮喷中文字幕| 亚洲激情免费视频观看| AV性爱在线| 五月丁香激情婷婷| 人人干人人操人人摸| 99热这里只要精品免费| 五月天亚洲色| 色五月天丁香婷婷| 婷婷五月av| AV在线观看网站| 婷婷国产成人| 婷婷九月激情| 色啪网| 五月激情小说| 无码免费人妻A片AAA毛片西瓜| 丁香婷婷久久| 成人.在线日韩| 97干干干丁香| 色色色天堂网| 99精品自拍视频| 91久久1118| 久热9| 久久久久这里都是精品| www婷婷亚洲| 激情五月天之六月婷婷| 天天色激情| 天天爽天天爽视频| 国产日产成人亚洲欧美国产VA| 婷婷激情四射| 人妻videos人妻高清| 内射丰满人妻| 99热在这里只有精品| 婷婷成年人免费视频| 久久激情天堂| 天天干天天拍| 9 1大香蕉| 亚洲xx网| 多精窝99在线视频| 激情综合色婷婷六月天| 91久久99久久91熟女精品| 婷婷丁香人妻天天爽| 国产精自产拍久久久久久蜜| 97在线干| 婷婷激情五月天网站| 婷婷热婷婷色| 综合久久99| 无码人妻激情| 337久久| 1999天天操夜夜操| 狠狠色官网| 丁香六月婷婷综合啪啪| www,天天干| 97色婷婷| 香蕉操亚洲| 婷婷五月欧美综合| 青青草原伊人网| 五月天大香蕉| 久热丁香| 少妇人妻凹凸视频| 开心五月婷婷激情| 1024在线视频| 综合AV网| 亚洲av网站在线观看| 五月丁色AV| 五月网在线| 色色色999| 1024操逼| 色情五月天视频网| AV性爱网| ..真实国产乱子伦毛片| 五月丁香婷婷啪啪| 日韩AAAAA| 久久久久婷婷| 国产.亚洲.欧洲视频在线| 精品无码色欲AV| 五月天婷婷综合免费| 色玖玖| 丁香视频| 一级A片天天操夜夜操| 色七七九九| 国产熟妇乱子伦hd| 人人干人人干骚美女| 天天激情| 亚洲成人AV电影在线| 欧美色99| 无码99| 久久人妻少妇嫩草AV| 五月激情网站| 久久综合人妻| 思思干精品| 国产中文亚洲欧美日韩性交| 九九久久99精品免费观看www| 伊人香大香蕉视频| 夜夜www| 激情综合五月天| 91人人妻人人操人人爽| 丁香五月婷婷天激情| 九九热免费| 色色婷婷婷丁香五月天| 丁香五月天天高清在线| 激情久久伊人| 四五月婷婷| 99久久6| 色爽九九| 狠狠色97| 欧美激情中文字幕| 色五月丁香五月天| 超级碰 久久9| 婷婷色成人| 亚洲成av人影院| 91碰碰| 婷婷丁香九月| 色综合丁香婷婷| 日本狠狠网| 亚洲黄网在线| 俺也高清无码高清视频| 丁香五月天堂亚洲社区| 色五月婷婷内射| 国产成人综合电影| 激情五月天色婷婷综合| 久久婷五月影院| 丁香五月天无码| 51精品国自产在线| 九九视频精品视频精品| 日本婷婷激情四射中文字幕在线观看| 久久一二三视频| 午夜成人片400| 婷婷五月天日逼| 乱精品一区字幕二区| 色色永久| 综合色图婷婷| 久久小片| av在线免费网站| 欧美日韩成人在线网站| 亚洲欧洲国产精品| 婷婷综合五月天| www99热| 激情婷婷丁香| www,五月丁,com| 久久这里只有精品07 | 久热9| 亚洲AV综合网| 六月天婷婷| 日韩三级片一区二区| 伊人五月天| 九九视频这里只有精品在线播放 | 久9综合| 亚洲欧州色情在线观看| www.com色播五月天| 日亚二欧美| 51成人| www.99热| 久久这里只有国产视频| 五月婷婷久久久久| 丁香五月在线| 婷婷激情五月综合在线视频| 成人丁香五月婷| 9热视频在线观看| 日韩无码专区| 色五月,com| 婷婷五月婷婷| 五月天婷婷日日爱| 综合久久婷婷99| 天天爱综合网| 免费AV黄在线播放| 丁香五月婷婷亚洲天堂| 久久这里都是精品| 乱色色色| 五月婷婷激情网| 久久久国产精品黄毛片| 久久99网| 激情5月婷婷狠狠干| 婷婷五月天亚洲综合网| 色色色五月婷婷| 国产精品五月丁香| 91视频五月丁香| 亚洲午夜AV| 五月婷婷人妻| 色久播播| 欧美在线视频9| 91狠狠综合久久| 精品九九视频| 97碰免费视频在线| 好吊兆人妻| 色婷婷88| 天天色综合网吨吧| 亚洲视99| 久久精品99久久| 中国丰满熟女A片免费观| 丰满熟女人妻一区二区三| 在线婷婷| 色婷婷最新域名| www.久久久久| 天天肏高清在线| 婷婷丁香五月天在线视频| 狠狠色网| 99热99精品在线观看| 婷婷伊人综合中文字幕| 色综合综合网| 色五月丁香五月五月婷婷| 色yeye色综合| 狠狠CAO日日穞夜夜穞AV| 99人妻碰碰碰久久久久视| 婷婷区日本| WWW99热| 亚洲黄网在线| 国产伦亲子伦亲子视频观看| 九九这里是免费的视频5| 五月婷婷色情| 人人玩人人橾| 99色综合网| 色婷婷无吗| 人妻体体内射精一区二区 | 五月天基地| 丁香网五月天| 欧美交换配乱吟粗大25P| 99综合网| 激情丁香五月天图片| 天天日天天摸天天| 天天插天天狠| 丁香花色色网| 激情六月天婷婷| 综合激情四射一theav| 一本道在线电影| 久久久五月天| 91婷婷丁香| 天天爽天天日| 直接看的AV| 婷婷综合伊人丁香| 婷婷五月天手机版视频| 亚洲婷婷月丁香五月| 9久久精品| 色综合中文| 久久婷中文字幕| 七七色综合| 中文字幕1区2区。| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久婷婷五月丁香网| wwww.色婷婷| 超碰熟女农村在线69| 狠狠干狠狠干| 无码人妻少妇色欲AV一区二区| 99视频这里有精品| 色情五月丁香| 亚洲激情综合| 风流少妇A片一区二区蜜桃| 激情综合网激情五月天| 亚洲成av人影院| 久久怡红院| 99热一区| 香蕉久久国产AV一区二区| 欧美性爱五月天| 欧美噜噜免费观看 | 91婷婷丁香五月| 婷婷色操| 超碰成人免费| 大香蕉520| 香蕉婷婷| 久久无码成人| 丁香五月 性爱| ou洲色吧| 亚洲AV中文在线| 国产精品成人AV在线| 7超碰自拍| 好好干Av| 日韩无码人妻一区二区三区综合| 五月天婷婷成人资源站| 开心激情播播五月天| 欧美五月丁香| 99久久婷| 婷婷五月影院| 久草婷妨| 亚洲网站999| 久热这里只精品| 五月综合婷婷开心网| 99热骚货| 五月天婷婷视频小说| 久久婷狠狠色| 专区无日本视频高清8| 黄网在线免费| 色五月婷婷AV| 色色综合成人网| 丁香婷婷啪啪啪| 99热精品中文字幕| 九九av| 少妇熟女视频一区二区三区| 色综啪啪啪啪啪啪| 另类图片天天影视在线观看| 日韩AAA| 99久久6| 欧美日韩99| 激情五月婷婷| 久久久久久久久久久97| 亚洲欧洲色色| 99色网站| 婷婷六月色| 国内9l视频自拍老熟女九色| 99爱爱| 亚洲综合婷婷五月| 久青操| 少妇熟女视频一区二区三区| 黄色99热| site:esunnet.com| 五月丁香六月色| 色色色热| 天天操精品| 丁香女人五月天| 婷婷天天色| 久热这里只有精品6| 最新婷婷五月丁香| 婷婷五月天av网| 久久怕怕视频| 中国女人内射6XXXXX| 天天综合五月天| 情欲综合网| 超级碰碰91| 99ree6| 内射综合网| 99热这里有精品2| 五月丁香六月激情综合| 在线看AV| 天天舔天天摸天天射| 国内外色色色色色成人视频| 成人国产欧美大片一区| 丁香婷最新动态| 精品久久久人妻| 亚洲成av人影院| 99网址在线看| 日韩1区2区| 国产古装妇女野外A片| 九洲一级A片| 99爱无码| 大地资源色婷婷视频在线| 欧美综合五月丁香六月婷| 狠狠撸激情综合丁香五月天俺来啦| 色色婷婷五月| 成人在线网站| 婷婷五月丁香手机在线视频| 精品香蕉99久久久久网站| 超碰亚洲天堂| 成人一级片| 91在线看片| 婷婷在线操| 丁香婷婷五月| 日本操碰碰| 五月色综合网| 97人人操人人拍| 亚洲激情五月婷婷日日| 丁香六月婷婷综合| 亚洲av综合网| 97操在线视频| 97人人看| 五月 成人 婷婷| 91日综合欧美| va婷婷| 综合色、色综合| 亚洲综合色网站| 性色五月天| 婷婷五月丁香综合| av在线激情| 色爱99| 另类小说色婷婷| 成人片在线免费看| 天天狠狠六月婷丁香影院| 亚洲九九99精品视频在线播放| 丁香六月婷婷高清| 人妻丰满精品一区二区A片| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 99久久国产宗和精品1上映| 女人天堂av| 99色| 五月婷婷综合激情| 婷婷情色开心五月天99| 五月丁香六月停停| 97操碰98| 激情综合网五月激情| 99艹精品在线观看| 日日操天天操| 丁香久久综合| 色五月在线观看| 五月丁香六月在线欧美| 99婷婷| www.狠狠色.com| 爽tv | 色播婷婷五月天| 丁香五月婷婷综合激情哟哟哟| 色婷婷狠狠久久综合五月| 蜜臀av 粉嫩av 懂色av| 韩国激情五月天综合网| 色碰干| 色五月网址| 丁香婷婷五月天色综合| 少妇伦子伦精品无吗| 亚洲精品五月| 婷婷伊人綜合| 1024日韩| 日韩av干| 99日视频在线| 超碰AV在线| 思思热在线视频观看精品| 草草夜夜操| 九九99视频| 91婷婷搞| 精品亚洲国产成AV人片传媒| 丁香五月婷综合网| 99在线精品视频| yazhou seshipin| 99精品视频免费观看近期发布| 五月婷婷网站| 美女黄频aⅴ视频| 久操热| 色婷婷狠狠干芒果TV| 综合伊人久久| 欧美成人精品三区综合A片| 五月天夜夜爱夜夜操| 国产免费av在线| 亚洲色热| 逼里香不卡| 91日本在线观看| 久久五月婷6 9| 99激情| 99热日韩这里只有精品| 91九色成人原创视频| 五月天激情四射| 婷婷成人五月天一区| 色五月大| 中文字幕日产A片在线看| 五月六月丁香激情| 六月丁香啪| 五月激情婷婷四射| 99re久久| 五月天综合久久| 五月天 综合 在线| 大香蕉久久草| 曰韩五月丁香色婷婷无码| 丁香五月激情啪| www.五月天。com| 亚洲av成人在线| 五月婷婷电影院| 97精品综合久久| 天天色综合网1| 综合激情五月四射婷婷| 伊人综合婷婷| 亚洲AV在线免费看| www.五月丁香| 99精品无码| 无码激情精品色婷婷久久久久| 99re在线视频| 丁香花狠狠婷婷亚洲中文字幕| 丁香五月人妻| 激情视频综合| 色婷婷AV久久久久久久| 热久久77777| 91丨九色丨丰满人妖| 丁香啪啪中文字幕| 无码人妻AV久久久一区二区三区| 久久九九@| 色色免费网战视频| 南京搡BBBB搡BBBB| 五月婷丁香| av激情在线| av在线免费播放观看| 精品人妻伦九区久久AAA片| 久久五月网| 久久婷婷六月综合综合色| 青青草蜜臀| www,8050,午夜三级| 色五月婷婷综合在线| 久久免费高| 国产乱妇乱子在线播视频播放网站 | 综合在线色婷婷| 爆乳熟女-区二区三区| 嫩草AV久久伊人妇女超级A| 久热无码| 五月天婷婷久久| 婷婷五月激情的图片| 五月天色影院| 色五月丁香六月欧美综合| 开心五月婷婷激情网| 久久99最新| 九九这里只有精品在线视频| 黄网在线播放| 超碰人人艹| 色色丁香婷婷综合| 日本系列_4页_777FP| 玖玖婷婷色| 99 福利 导航| 91丨九色熟女丨首页| 五月久久| 1234操逼网| 人人操操97| 色月丁| 色婷婷四色| 色色五月激情| 国产九九一区二区三区| 久操97| pom538精品视频| 97超碰在线免费观看| AV大片在线观看| ou洲色吧| 亚洲成人九九九| 97婷婷狠狠久久综合9色| 五月丁香毛片| 久久99网址| 久久作爱| 极品色丁香| 激情丁香婷婷五月天| 五月婷婷久久开心网| 狠狠色狠狠鲁| 丁香色综合| 99热这里只有精品中文字幕| 丁香五月成人| 91超级碰碰| 欧洲色| 97精品人人A片免费看| co超碰在线观看| 婷婷六久久| 婷婷九月丁香天堂丁香天堂| 99热在线精品观看| 婷婷的激情五月| 26uuu国产精品| 99热这里只有是亚洲国产| 99热在线播放| 97色干| 图片区 小说区 区 亚洲五月| 色综合久久久无码中文字幕999| 超碰在线资源| 日本三级中文字幕| 久久五月天综合视频网站| 色色亚卅| 五月丁香六月婷婷色情| 激情网五月| 综合AV网| 4399欧美另类视频| 中海油常州环保涂料有限公司| 久久婷婷五月草视频在线播放| 久久九九大香蕉电院| 婷婷五月天亚洲五码| 欧洲亚洲精品| 婷婷的五月天另类视频| 六月婷婷色色色| 久久婷婷五月国产色综合激情| 思思99热这里只有精品6| 日日干天天| 丁香五月社区| 夜色爱爱亚洲| 操碰97| 9久热这里只有精品| 激情亚洲婷婷| 欧美性生交XXXXX无码小说| 日本在线wwww| 久鲁鲁色网 | 婷婷五月丁香五月基地| 香蕉综合在线| 毛片九九九九九九九九18| 日韩成人电影在线播放| 91啪级电影| 99超级碰碰| 欧美69久成人做爰视频| 99超碰在线观看| 色综合久久88色综合天天人守婷| 99∨VTV| 俺去也五月| 九色七七| 99人人操人人摸| 91日本在线观看| 九九XX视频| 97色碰| 亚洲视色| 内射人妻视频国内| 91色涩| 国产精品婷婷午夜在线观看| 小视频久久久aaa| 2005天天干天天1| 婷婷久久午夜网| 五月婷婷深深爱| 清纯唯美 激情四射| 五月婷在线观看| 天天干夜夜谢| 碰97 久| 久久九九综合| 天天日 天天草| 丁香五月之久操视频| 五月久久五月激情| 97碰碰视频| 亚洲成人日韩无码精品| 亚洲 精品 综合 精品| 婷婷五月AV| 激情五月天第四色| 色五月激情基地| 激情五月综合亚洲另类| 激情久久久久久久久久久| 欧美爆乳一区二区三区| 国产毛多水多女人A片| 爆乳熟妇一区二区三区爆乳照片| 婷婷丁香色无五月| 99人妻碰碰久久久禁片| 日本激情ⅩXX免费视频| www.婷婷亚洲基地| 少妇婷婷五月天| www.亭亭五月天| 四川女人毛多水多A片| 在线五月婷婷小电影| 91超级碰在线视频| 色婷亚洲五月丁香| 天堂草在线看www| 潘金莲AAAAAAAAAA| 日韩av干| 色婷婷成人做爰A片免费看网站| 丁香五月色| 五月丁香91| 中文字幕97超级碰| 丁香五月激情网| 人人操大| 五月草视频| 免费日本aⅴ中文字幕| 色五月婷婷久久大| 丁香五月婷婷综合啪啪| 五月激情婷婷六月丁香| 色婷婷激情| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 99视频内射三四| 91婷婷| 网色99| 九九av| 精品久热| 啪啪色激情五月天| 99色| 国产日批视频| 亚洲亚洲人成综合网络| 亚洲欧洲自拍图片专区五月天| 九九热在线视频| 久色成人| 亚洲黄色网址| 五月天色婷婷伊人网| 丁香九月色| 婷婷五月亚洲一本在线丁香| 国产色香蕉精品五夜婷| 久久性爱视频网站| www.婷婷.com| 欧美 日韩 成人在线| 99ri精品视频在线观看| 26uuu日韩| 翔田千里aV中文字幕| 丁香五月花| 色综合色色色色色| 激情婷婷丁香色五月| 久久久无码精品成人A片小说 | 99∨VTV| 六月丁香大香蕉| 99热这| 好吊丝aV| 国产精品黑丝| 69久久99精品久久久久婷婷| AV在线资源| 嫩草AV久久伊人妇女超级A| 五月丁香婷婷激情在线| 日本在线观看aaa 99| 亚洲色五月| 五月丁香亚洲校园欧美| 九九热免费视频| 天天做天天爱天天玩夜夜爽| 嫩草国产| www.婷婷五月| 色婷婷六月开心中文字| 久热精品在看| 丁香六月情| 九九热区一区二区三区| 久久婷婷大香蕉| 久久色天堂| 六月丁香射婷婷欧美色图片| 在线sebiav精品视频| 91丁香五月| 色婷丁香五月| 丁香99| 久久久99久久| 5月婷婷性视频| 淫荡A片| 激情五月婷| www夜夜操wwwcon| 国产免费一区二区三区三州老师F1F1.CC | 就爱射中文字幕资源网| 久久九九@| 双性美人被调教到喷水A片| 婷婷五月天开心网| 性色播| 综合网色综合| 五月丁香啪啪网| 综合久久五月天| 天天综合久久| 人人草碰| 久久色情| 天天色天天| 天天日日人| 日韩AV一区二区三区| 思思热这里只有精品| 日韩色色视频www| 久99| 精品操逼一区二区| 五月丁香综合啪啪| 五月婷婷激情综合av| 色色色在线播放| 久久婷婷人人| 亚洲色就是色色色| 亚洲AV网站| 五月深爱激情网| 国产亚洲99| 亚洲AV无码影院| 九九视频在线观看视频6| 国产成人高清| 丁香六月无码| 伊人丁香六月婷婷| 天天综合网~91综合网| 五月婷婷影视| 天天操综合网| 91日视频| 亚洲 六月 综合| 色色永久| 亚洲综合网 665566| 国产探花一片区| 成人综合网站| www色色色com| 五月丁香婷婷网在线在线| 激情五月色综合国产精品| 91chinese在线| 色五月婷婷五月天激情综合| 玖玖婷婷免费| 欧美成人精品A片免费一区99| 91丨九色丨熟女| 五月丁香黄色视频| 69婷婷丁香午夜| 99综合视频在线| 亚洲AV网站在线观看| 欧美三级大片AA在线看| AA片在线观看视频在线播放| 天天操婷婷| 午夜成人天堂久久无码日韩久久| 综合久久人妻| 大香蕉院线| 色婷婷五月丁香在线观看| 日韩九区| 五月丁香大相交| 九色在线观看91av| 色综合久久无码| 超碰97在线观看免费| 久久99国产综合精品免费| 亚洲激情婷婷| 99色色网| 久久五月网| 超级碰碰碰97免费| 99色热视频在线| 天天婷婷综合亚洲亚洲| 婷婷激情五月天小说校园| 小视频一区| 久久这里只有精品无码| 日本精品。999| 婷婷在线观看五月天在线视频| 九月丁香| 色10月婷婷视频| 日本九九九九| 婷婷激情五月| 天天操天天日天天爱| 六月婷婷综合| 久99热| 91碰碰| 亚洲va欧美| 人人干人人干骚美女| 99热这里只有精品26| 六月丁香婷婷视频综合在线观看| 激情丁香社区| 日本老女人黄页在线播放| 色婷婷狠狠| 婷婷六月丁香开心深深爱| 99热免费网站| 色色99色色| 五月婷婷熟女| 久色五月| 无码任你操| 亚洲热视频| 欧美色色色色色色| 91精品无码| 亚洲免费婷婷| 五月婷婷激情网| 国产精品久久久久久喷浆| 婷婷中文字幕欧美| 影音先锋91视频| 亚洲综合在线网站| 色五月婷婷91| 日本久久天堂| 91精品熟女| 欧美综合激情五月| 九九视频这里只有精品| 99re热在线视频观看| 中文字幕在线日亚洲9| 色婷婷五月天在线观看| 大战熟女丰满人妻AV| 北条麻妃伊人| 国产婷婷综合| 青草青草久热这里只有精品| 婷婷五月深深的爱| 亚洲狠狠狠| 婷婷五月色惰| 亚洲综合99| 爆乳熟妇一区二区三区四区| 免费操超碰| 五月丁香色| 精品一区二区三区四区五区六区介绍 | wwwss在线观看| 日韩免费视频| 一本狠婷婷综合| 色狠狠综合网| 天天成人综合| 六月丁香VA| 久久视频婷婷视频| CHINESE熟女老女人HD视频| 9999热免费视频视频| 九九色大香蕉| 九九热九九热精品| 天天爽天天日天天舔| 成人在线不卡| 刘玥av在线| 国产亚洲99久久| 五月网激情| 色色色.COM| 午夜丁香婷婷| 国内精品99| 超碰男人色| 五月婷婷五月天天| 激情综合色婷婷啪啪六月天| 婷婷五月色| 五月丁香888| 六月婷婷六月天天在线免费| 九九99视频| 九九热在线观看视频| 九九成年视频| 99热色无码| 激情99在线视频| 欧美性丁香色色五月天干干| 色五月婷婷丁香凹凸| 成人日韩欧美| 激情五月,激情综合网| 99精品热| 1234操逼网| 色丁香综合影院| 五月天婷婷操逼视频| 欧美情色一区| 91九色国产| 天天日天天日天天搞| 激情小说视频图片| 丁香五月婷婷高清| 电影《战争与艾拉》免费观看| 日婷婷久久开心| 99精品偷自拍| 99操无码视频观看| 五月婷婷综合潮喷| www.色婷婷| 六月丁香停| 婷婷伊人久久综合| 五月天开心网| 97色色综合| 久久人妻情侣| 天天色天天| 六月婷婷色色色| 色欲资源网| 大香蕉520| 成人一级片| 丁香六月情| 另类在线免费视频| 啪啪一区| 五月婷婷六月天| 婷婷五月花西瓜| 色狠狠色噜噜AV天堂五区| 99久久婷| 丁香五月婷婷在线| 97人人操人人插| 色情·com| 九九久久综合| 中文字幕av亚洲| 婷婷五月美女直播| 亚洲色就是色色色| 一区二区中文字幕| 丁香色色网| 久草a片| 黄色激情五月天| WWW、99热| 色视五月天婷婷| 久久xxxx| 亚洲五月天色| 色区久久| 狠狠久久婷五月| 丁香五月婷婷五月天| www.91色| 久久人人超| 五月天婷婷久草丁香| 丁香五月婷婷在线视频| 天天射影院| 国产精品在线视频| 色99在线| 亚洲无码成人网| 九九热只有精品| 五月婷色色| 色综合色色| 亚洲色啪| 9+1视频网址| 99re热视频这里只有综合亚洲| 黄色片区子| 丁香五月香蕉| 色99网| 狠狠色综合网| 人妻内射视频| 久久只有这里精品免费| 国产激情综合五月久久| 天天综合情| 色丁香五月婷婷| 亚洲avjiujiur91| 无码人妻丰满熟妇奶水区码| 亚洲婷婷丁香五月天激情小说 | 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 亚洲性图一区二区| 久草婷婷在线| 丁香五月五月婷婷五月天激情四射| 99热在线观看成人| 五月深爱网| 成人啪啪色婷婷久| 久久五月天色婷婷| 人妻精品在线| 狠狠色成人影片| 色婷婷在线视频久| 狠狠精品干练久久久无码中文字幕| 六月丁香五月激情网| 操日本99| 涩综合婷婷| 久久大香蕉同僚| 婷婷六月激情| 色五月丁香婷婷综合| 婷婷视频在线碰| 色五月色五天免费视频| 九九精品热播| 婷婷五月天AV| 婷婷色五月亚洲| 99久久婷婷国产综合精品电影| 亚洲情欲| 欧洲亚洲免费视频9| 99久久网站| 天天干天天操天天爱| 免费啪啪啪网站| 久久九九爽| 丁香五月视频在线观看| 丝袜熟女一区二区三区| 激情五月婷婷| 99久久丝| 97搞在线| 色婷六月| 激情涩涩网| 伊人大香蕉爱聚| 91干视频| 精品婷婷五月天| 97丁香视频| 五月天精品视频| 五月天婷爱综合| 超碰无码318604| 九九av| 久色婷婷200| 激情五月天在线观看婷婷| WWW色五月| 色婷婷9| 呦呦v线| 超碰国产av| 国产精产国品一二三在观看| 色五月丁香五月天| 一起草AV| 久久婷婷网址| 丁香六月综合激情| 色色亚卅| 成人av在线网站| 青青草青青草五月天| 国产免费一区二区三区三州老师F1F1.CC| 色五月开心婷婷| 九九精品碰| 天天爽天天| 五月天天久久香| 96性爱视频|