久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

CMake實戰(zhàn)進階:從Makefile到跨平臺構(gòu)建系統(tǒng)的完整指南

CMake實戰(zhàn)進階:從Makefile到跨平臺構(gòu)建系統(tǒng)的完整指南 寫在前頭我正在整理一份完整CMake教程。前陣子有朋友跟我抱怨說代碼在自己電腦上跑得好好的換到Linux服務器上編譯直接掛掉一查頭文件路徑全寫死成本地目錄格式了。我問他為什么不用CMake他的回答很有意思那玩意兒太復雜我寫了三年Makefile都沒弄明白。這話我聽過不止一遍。但說實話CMake根本不需要當一門編程語言去啃。它更像一個資產(chǎn)管理工具幫你把編譯哪些文件、用什么參數(shù)、依賴什么東西、裝到哪里去這些事說清楚剩下的事它自動干。這篇文章我會用模擬項目X一個叫imgproc的小圖像處理庫從單文件到可安裝發(fā)布版的完整過程把CMake里真正常用、真正容易踩坑的知識點挨個過一遍。適合兩類人C/C項目剛起步、覺得Makefile難以維護的新手以及已經(jīng)會用CMakeLists.txt、但一直靠復制粘貼改改、不太理解背后邏輯的進階用戶。1. 為什么是CMakeMakefile解決不了的那攤子事先聊動機。很多人寫C/C程序最初的構(gòu)建方式就是一條gcc命令后來文件多了就上Makefile。但Makefile有個天生缺陷它描述的是一條條具體的構(gòu)建命令而這些命令依賴具體的操作系統(tǒng)、編譯器、路徑風格。1.1 手寫構(gòu)建腳本的死穴同樣是編譯一個靜態(tài)庫Linux下ar打出來的庫叫l(wèi)ibxxx.aWindows下lib.exe打出來的叫xxx.lib同樣的頭文件搜索路徑Linux用冒號分隔Windows用分號編譯選項更是完全兩套GCC用-O2 -WallMSVC得用/O2 /W3。如果一份代碼要跨平臺交付你手寫Makefile就得同時維護好幾套規(guī)則再加一層if層判斷系統(tǒng)。我見過不少項目就是這么縫出來的一套Makefile里堆滿ifeq ($(OS),Windows_NT)另一套.bat批處理文件負責Windows下的構(gòu)建。每次改依賴、加目錄、調(diào)參數(shù)兩邊都要同步改稍不留神就漏一處然后就是長達半天的心智損耗排查。1.2 CMake的核心思想描述目標而不是描述命令CMake換了個思路。你的CMakeLists.txt不寫怎么編譯只寫這個項目有哪些目標(target)每個目標包含哪些源文件、需要什么頭文件路徑、鏈接什么庫。至于編譯器怎么調(diào)用、靜態(tài)庫叫什么后綴、路徑用什么分隔符CMake會在配置階段根據(jù)當前平臺的默認規(guī)則自己搞定。這就是它自稱為元構(gòu)建系統(tǒng)的原因CMake本身不直接編譯代碼它根據(jù)一份抽象描述生成當前平臺最合適的構(gòu)建文件Linux下生成MakefileWindows下可以生成Visual Studio工程也可以生成Ninja文件。1.3 兩階段執(zhí)行模型先畫圖紙再施工理解CMake的關(guān)鍵是搞清楚它的兩階段執(zhí)行模型。配置階段Configure是CMake讀取CMakeLists.txt、執(zhí)行各種邏輯、探測環(huán)境的過程最后生成一套構(gòu)建文件。構(gòu)建階段Build是你真正調(diào)用編譯器、鏈接器出產(chǎn)物的過程。這兩件事分離帶來一個好處同一個項目可以保持多套構(gòu)建目錄一套Debug、一套Release、一套帶靜態(tài)分析工具互不干擾隨時切換。這也是為什么我們習慣用cmake -S . -B build單獨指定目錄讓源碼樹保持干凈。形象點說CMake是畫圖紙的設(shè)計師Make/Ninja是拿著圖紙施工的隊伍。理解了這個模型后面看到變量緩存、生成器表達式這些概念就不會發(fā)怵它們都是在配置階段這一層做文章。2. 最小CMake項目從一行打印到雙目錄結(jié)構(gòu)好理論先放一邊直接上手。模擬項目X最初只有一個main.cpp功能是讀一張圖片做灰度化。最基礎(chǔ)的CMakeLists.txt長這樣cmake_minimum_required(VERSION 3.16) project(imgproc) add_executable(imgproc_demo main.cpp)這就是起步所需的最小集合。cmake_minimum_required不只是檢查版本號它還設(shè)置CMake的策略級別決定哪些新版本的行為變更會生效這會影響后面很多語法細節(jié)。project命令有兩件事要做設(shè)置項目名以及探測當前環(huán)境支持的C/C編譯器。add_executable是主角命令聲明一個可執(zhí)行目標。目標是CMake里的頭等公民后續(xù)的include路徑、編譯選項、鏈接庫全部圍繞目標展開。2.1 構(gòu)建流程為什么強烈建議用 -B 參數(shù)配置和構(gòu)建的命令長這樣cmake -S . -B build cmake --build build-S .指定源碼目錄-B build指定構(gòu)建目錄。這里我多說一句很多舊教程教你mkdir build cd build cmake ..效果差不多但-S -B寫法更直白尤其當源碼目錄和構(gòu)建目錄不在相鄰位置時一眼就能看懂誰是誰。構(gòu)建產(chǎn)物全部落在build里源碼目錄只有一份干凈的CMakeLists.txt和源碼就算你同時開一個build-debug和一個build-release也不會互相污染。2.2 遇到的第一批問題頭文件路徑與源文件膨脹很快main.cpp就膨脹了我把圖像格式解析拆到img_format.cpp把濾波算法拆到filter.cpp。這時候CMakeLists變成cmake_minimum_required(VERSION 3.16) project(imgproc) add_executable(imgproc_demo main.cpp img_format.cpp filter.cpp ) target_include_directories(imgproc_demo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)target_include_directories這條命令值得重點講。它把某個頭文件搜索路徑作用到指定目標上PRIVATE表示這個路徑只對imgproc_demo自己有效。后續(xù)如果別的目標也要用這些頭文件得單獨聲明。2.3 拆庫add_library、target_link_libraries與依賴傳遞代碼量繼續(xù)上漲main.cpp引用的函數(shù)越來越多編譯單元之間的依賴也亂了。這時候一個想法很自然把圖像格式解析和濾波算法拆成一個獨立的庫讓main.cpp只做入口邏輯順便以后寫單元測試時不用重復編譯全部源碼。于是拆成一層靜態(tài)庫cmake_minimum_required(VERSION 3.16) project(imgproc) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_library(imgproc_core STATIC img_format.cpp filter.cpp ) add_executable(imgproc_demo main.cpp) target_include_directories(imgproc_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) target_link_libraries(imgproc_demo PRIVATE imgproc_core)這里庫的類型有三種寫法STATIC靜態(tài)庫SHARED動態(tài)庫INTERFACE頭文件庫。有接口(INTERFACE)的庫下面鏈接時會用到。target_link_libraries(imgproc_demo PRIVATE imgproc_core)既有字面意思也有隱含的傳遞邏輯。這個傳遞邏輯是多數(shù)初學者最容易懵的地方。我給個生活化解釋你家的書房imgproc_core里有一些頭文件對外暴露的接口你兒子imgproc_demo要借用書房的資料你得告訴兒子這些接口在哪兒。問題是兒子以后要不要把書房的位置轉(zhuǎn)告給他的朋友另一個目標PUBLIC表示我用了而且我的使用方式導致我的依賴方也得知道這些頭文件路徑PRIVATE表示我只是內(nèi)部實現(xiàn)用了外部不需要知道。翻譯到代碼里就是PUBLIC會把自己的include目錄、編譯定義、鏈接庫一并傳給下游目標PRIVATE只留在當前目標自己這層。3. 變量、選項與生成器表達式配置階段的分支邏輯當項目規(guī)模再上來你會發(fā)現(xiàn)CMakeLists.txt開始寫成程序的樣子要定義變量、要根據(jù)條件走不同分支、要根據(jù)不同構(gòu)建類型施加不同參數(shù)。這一章我們把CMake的編程能力說透。3.1 set變量與緩存變量set(VAR value)定義的是普通變量只在當前CMakeLists.txt及其子目錄生效。還有一種緩存變量通過set(VAR value CACHE STRING 說明)或option()定義它會被寫進構(gòu)建目錄下的CMakeCache.txt下次配置時依然保留也可以在cmake -D命令行里覆蓋它的默認值。舉個實際例子我給模擬項目X加一個開關(guān)是否編譯測試代碼。這個開關(guān)不能是普通變量得讓用戶構(gòu)建時能改、能覆蓋。option(BUILD_TESTING Build unit tests OFF) if(BUILD_TESTING) enable_testing() add_subdirectory(tests) endif()用option而不是set的好處是CMake緩存里會自動生成一個可勾選的開關(guān)圖形界面和命令行都方便調(diào)整而且默認值只在第一次配置時生效用戶之后通過-DBUILD_TESTINGON改過會一直記住新值。3.2 if判斷里的門道if()判斷語句看起來和所有語言一樣但有幾個坑。比如if(BUILD_TESTING) # 變量為ON/OFF/TRUE/FALSE時都能解析 if(DEFINED SOME_VAR) # 判斷變量是否已定義實際工作中我建議用帶上引號的寫法避免變量值未定義時報錯或者被當作路徑解析if(${BUILD_TESTING})3.3 生成器表達式配置階段最后的靈活手段這是CMake里最抽象的概念也最值錢。普通變量在配置階段就被固定成字符串了而生成器表達式(Generator Expressions)可以推遲到構(gòu)建階段才求值所以它能拿到每個具體構(gòu)建目標、具體配置類型的信息。最常用的幾個生成器表達式表達式含義$TARGET_EXISTS:name目標是否存在$TARGET_NAME_IF_EXISTS:name目標存在則用目標名否則返回空$CONFIG當前構(gòu)建配置Debug/Release等$BOOL:...把值轉(zhuǎn)成ON/OFF$BUILD_INTERFACE:...僅在使用構(gòu)建目錄時生效$INSTALL_INTERFACE:...僅在安裝后被外部項目使用時生效我給個具體用法。模擬項目X要支持一個可選特性圖像去霧。這個功能依賴OpenCV但不是每個人都有OpenCV環(huán)境于是按需編譯find_package(OpenCV QUIET) if(OpenCV_FOUND) target_sources(imgproc_core PRIVATE dehaze.cpp) target_compile_definitions(imgproc_core PRIVATE WITH_DEHAZE1) target_link_libraries(imgproc_core PRIVATE ${OpenCV_LIBS}) endif()還有更常見的場景是編譯選項按配置區(qū)別target_compile_options(imgproc_core PRIVATE $$CONFIG:Debug:-g3;-O0 $$CONFIG:Release:-O2;-DNDEBUG )因為target_compile_options本身就允許帶生成器表達式所以Debug和Release可以一口氣寫好不用if套if。這種寫法在Makefile時代要維護兩三套規(guī)則在CMake里就一行。3.4 為什么優(yōu)先使用target_*系列命令看多了各種代碼你會發(fā)現(xiàn)CMake有兩條命令路線目錄級命令如include_directories、add_compile_options以及目標級命令如target_include_directories、target_compile_options。我強烈建議新項目一律用target_系列。原因很簡單作用域。目錄級命令一旦執(zhí)行影響的是整個目錄及其子目錄的所有目標后面對某個目標單獨調(diào)整時很難精準覆蓋。目標級命令則精確控制到單個目標依賴傳遞關(guān)系也清晰。小項目感覺不明顯一旦目標一多全局影響就是排查問題的黑洞。4. 第三方依賴find_package與FetchContent的分工C/C項目很少是不依賴任何第三方庫的。模擬項目X開始需要一個JSON解析庫需要接SQLite。這一章講依賴管理的兩種主要手段。4.1 find_package尋找系統(tǒng)里已經(jīng)裝好的庫find_package有很多人無腦用但理解它分兩種模式很有必要。Module模式CMake自帶的FindXXX.cmake模塊負責在系統(tǒng)里找?guī)煺业胶笤O(shè)置XXX_FOUND、XXX_INCLUDE_DIRS、XXX_LIBRARIES變量。Config模式庫本身安裝時提供了xxx-config.cmake文件里面定義好了導入目標imported targetfind_package執(zhí)行后你可以直接用target_link_libraries(app PRIVATE xxx::xxx)這種帶命名空間的方法鏈接。后者是現(xiàn)在的趨勢因為導入目標把頭文件路徑、鏈接庫、編譯選項、甚至依賴的其他庫都打包好了使用方不需要自己拼路徑。find_package(spdlog CONFIG REQUIRED) target_link_libraries(imgproc_core PRIVATE spdlog::spdlog)技巧怎么查一個庫是否提供Config模式去系統(tǒng)或安裝目錄看通常會有l(wèi)ib/cmake/xxx/xxxConfig.cmake或類似路徑。如果沒有就得退到Module模式或者用下面說的FetchContent。4.2 FetchContent構(gòu)建時直接拉源碼如果你需要的是某個特定版本的庫而且希望整個項目可復現(xiàn)、不依賴系統(tǒng)環(huán)境FetchContent是更省心的方案。它會在配置階段把源碼下載到構(gòu)建目錄里然后通過add_subdirectory把庫的目標直接加進當前構(gòu)建。include(FetchContent) FetchContent_Declare( fmt GIT_REPOSITORY https://example.com/fmt/archive.tar.gz GIT_TAG v9.1.0 URL_HASH SHA256按實際填寫 ) FetchContent_MakeAvailable(fmt)這句話執(zhí)行完fmt庫的目標會自動加入直接用target_link_libraries(imgproc_core PRIVATE fmt::fmt)鏈接即可。我在實際使用中一般指定下載源碼包或Git tag并鎖定hash避免某些鏡像不穩(wěn)定或上游倉庫變動導致構(gòu)建突然失敗。4.3 兩種方式的選擇思路場景選哪個系統(tǒng)管理員已裝好特定版本庫希望直接用find_package項目要完全可復現(xiàn)不依賴他人環(huán)境FetchContent依賴庫較大編譯一次耗時較長優(yōu)先find_package減少無謂編譯依賴庫較小、單個頭文件為主FetchContent更簡單我的習慣是外部依賴盡量優(yōu)先find_package當某個庫在常見環(huán)境里都沒裝、或者版本不滿足要求時再退回FetchContent。兩個方案可以共存用find_package探測探測不到就用FetchContent兜底。5. 構(gòu)建類型與編譯選項Debug/Release的完整控制默認情況下CMake生成的構(gòu)建系統(tǒng)可能是單配置的也可能是多配置的。這個差異直接決定你怎么指定構(gòu)建類型很多人在這里踩坑。5.1 單配置生成器與多配置生成器Unix下的Makefile是單配置的。你執(zhí)行cmake -B build -DCMAKE_BUILD_TYPEDebug配置階段就決定好了Debug之后cmake --build build編譯出來就是帶調(diào)試信息的版本。想變Release得重新開一個構(gòu)建目錄或者改配置再重新生成。Visual Studio和Xcode是多配置的CMake生成時就同時包含Debug、Release、RelWithDebInfo等多個配置。你不需要在配置階段指定而是在構(gòu)建階段用--config選cmake --build build --config Release生成器表達式$CONFIG在多配置生成器下才有意義因為它能拿到每個具體的構(gòu)建配置。如果你在單配置生成器下使用它會在配置階段就展開成CMAKE_BUILD_TYPE的值。5.2 Debug和Release到底差在哪很多新手會問Debug和Release的區(qū)別是CMake自己搞定的嗎答案是CMake只會挑選合適的默認編譯選項但如果你有特定的優(yōu)化需求得自己加。以GCC為例CMake默認的Debug會帶-gRelease帶-O3 -DNDEBUG。-DNDEBUG這個宏會把assert()全部禁用掉這是Release更快的原因之一也是很多依賴斷言檢查的程序在Release下看起來正常但行為變了的根源。在MSVC下Debug默認關(guān)閉優(yōu)化并開啟調(diào)試符號Release默認/O2。兩者的CRT版本還不同Debug對應多線程調(diào)試DLLRelease對應多線程DLL混用會直接鏈接報錯。5.3 編譯選項的精準投放基于上面的分析我一般會在項目里這樣配置target_compile_options(imgproc_core PRIVATE $$CONFIG:Debug:-fno-omit-frame-pointer;-fsanitizeaddress $$CONFIG:Release:-O3;-marchnative ) target_link_options(imgproc_core PRIVATE $$CONFIG:Debug:-fsanitizeaddress )調(diào)試時開AddressSanitizer幫助抓內(nèi)存問題發(fā)布時開激進優(yōu)化。target_link_options也要跟著加因為像sanitize這種選項必須同時影響編譯階段和鏈接階段。這里有個容易被忽略的細節(jié)如果你給某個目標開啟了-marchnative那這個庫編譯出的二進制就只能在本機或相同指令集的機器上跑。分發(fā)到別的機器前要重新評估。真實項目里我傾向于不加-marchnative改用-O2兼顧通用與性能。6. 安裝與導出讓構(gòu)建產(chǎn)物能被別人一鍵使用構(gòu)建好的庫如果不安裝就只能在自己構(gòu)建樹里用。想讓其他項目通過find_package(imgproc)的方式使用需要給模擬項目X補上安裝規(guī)則和包配置文件。6.1 install命令的常規(guī)姿勢include(GNUInstallDirs) install(TARGETS imgproc_core EXPORT imgprocTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imgproc )GNUInstallDirs會按GNU的約定幫我們把目錄設(shè)好lib放庫include放頭文件bin放可執(zhí)行文件。這樣安裝出來的布局符合大多數(shù)系統(tǒng)的慣例后面接包管理工具也方便。PUBLIC_HEADER DESTINATION是安裝公開頭文件的一種簡寫前提是你在add_library或target_sources里把這些頭文件列出來了。如果頭文件較多、目錄結(jié)構(gòu)較復雜也可以用install(DIRECTORY src/ DESTINATION include/imgproc FILES_MATCHING PATTERN *.h)打包安裝。6.2 導出包配置文件光安裝庫和頭文件還不夠還需要告訴別的項目我提供了什么目標、依賴什么庫、版本是多少。這一塊CMake提供了輔助模塊include(CMakePackageConfigHelpers) install(EXPORT imgprocTargets FILE imgprocTargets.cmake NAMESPACE imgproc:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imgproc ) configure_package_config_file( cmake/imgprocConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/imgprocConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imgproc ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/imgprocConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/imgprocConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/imgprocConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imgproc )對應的imgprocConfig.cmake.in模板通常長這樣PACKAGE_INIT include(${CMAKE_CURRENT_LIST_DIR}/imgprocTargets.cmake)PACKAGE_INIT是configure_package_config_file處理的一段占位符它提供一些宏幫你在安裝目錄和構(gòu)建目錄之間做路徑切換。完成后其他項目只需find_package(imgproc CONFIG REQUIRED) target_link_libraries(my_app PRIVATE imgproc::imgproc_core)imgproc::imgproc_core的命名來自包名NAMESPACE目標名這是CMake社區(qū)現(xiàn)在推薦的風格能有效避免不同庫之間的目標重名沖突。6.3 構(gòu)建樹導出與安裝導出的區(qū)別export(EXPORT ...)和install(EXPORT ...)都能導出目標但用處完全不同。export導出的是當前構(gòu)建樹里的目標只在這臺機器上、這個構(gòu)建目錄里有效主要用于同一個工程內(nèi)的子項目互連。install(EXPORT)則生成安裝樹里的配置文件跟著庫一起部署到系統(tǒng)里這是面向其他項目的接口。實際交付外部庫時我?guī)缀踔挥胕nstall導出。如果只是內(nèi)部多個可執(zhí)行文件共享代碼是不需要走安裝這一步的直接add_subdirectory加target_link_libraries就夠了。7. 避坑清單這些年踩過的CMake坑CMake語法不難坑都在細節(jié)里。這一章集中記錄我在實際項目里反復踩過的幾類問題很多是從同事和社區(qū)里學來的教訓。7.1 不要用CMAKE_SOURCE_DIR判斷當前項目路徑CMAKE_SOURCE_DIR指向最頂層源碼目錄PROJECT_SOURCE_DIR指向最近一次調(diào)用project()的目錄。如果你的主項目通過add_subdirectory引入了一大堆別的項目這些宏的取值會不一樣。# 在子項目里用 ${CMAKE_SOURCE_DIR} 時指向的是主項目根目錄不是當前子項目 target_include_directories(imgproc_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)正確姿勢是${CMAKE_CURRENT_SOURCE_DIR}它永遠表示當前CMakeLists.txt所在的目錄。每當我看到${CMAKE_SOURCE_DIR}/src這種寫法第一反應就是查這個變量用在了哪個CMakeLists里。7.2 file(GLOB)收集源文件的隱患file(GLOB sources src/*.cpp)會自動收集目錄下的源文件用起來很爽但有個隱蔽問題CMake不會自動追蹤新加入的文件。你往目錄里加一個cpp如果配置階段沒重新跑構(gòu)建系統(tǒng)就不會把它編進去。新版本可以用file(GLOB sources CONFIGURE_DEPENDS src/*.cpp)讓CMake在每次構(gòu)建前重新檢查文件變化代價是一些構(gòu)建系統(tǒng)的額外開銷。但我仍然建議大項目手動列出源文件或者至少把這種寫法局限在非常穩(wěn)定的目錄里。手動列出來的另一個好處是代碼審查時能直觀看到新增了哪些編譯單元。7.3 CMakeCache.txt請不要手工改配置階段生成的所有緩存變量都存在CMakeCache.txt里。有些同學排查問題時喜歡直接編輯這個文件改完當時有效下次配置又被覆蓋而且格式稍有差池整個配置就壞了。我的建議是改緩存值一律用命令行cmake -S . -B build -DCMAKE_BUILD_TYPERelease如果你發(fā)現(xiàn)改了之后沒生效先把build目錄刪掉重新配置。構(gòu)建系統(tǒng)損壞時的經(jīng)典操作就是刪掉構(gòu)建目錄再重新來這比任何修復都干凈。7.4 add_subdirectory與FetchContent的二進制沖突當一個庫既可能被add_subdirectory引入又可能被FetchContent引入或者同一個庫在項目的不同層級被多次加入時會碰到目標重名最常見的報錯是add_library cannot create target ... because another target with the same name already exists。解決辦法是先用find_package探測探測不到再用FetchContent或者給子項目加上統(tǒng)一的前綴路徑。這里有個很實用的習慣在fetch新依賴時指定EXCLUDE_FROM_ALL避免它的所有目標都默認參與全量編譯否則構(gòu)建時間會失控。7.5 跨平臺編譯選項的寫法差異給GCC寫的編譯選項MSVC不認識反之亦然。所以跨平臺項目里的編譯選項要分平臺給比較穩(wěn)的寫法是if(MSVC) target_compile_options(imgproc_core PRIVATE /W4 /permissive-) else() target_compile_options(imgproc_core PRIVATE -Wall -Wextra -Wpedantic) endif()MSVC變量只在Windows MSVC編譯器時定義用它可以干凈地把兩套參數(shù)分開。如果你不知道某個選項是否兼容最穩(wěn)妥的辦法是看庫的開源項目怎么處理或者用check_cxx_compiler_flag先做編譯器能力探測。7.6 C標準設(shè)置引用全局變量不如目標級設(shè)置set(CMAKE_CXX_STANDARD 17)是全局設(shè)置對之后創(chuàng)建的所有目標生效但也容易影響通過add_subdirectory引入的其他子項目。推薦做法是把標準設(shè)在目標級別target_compile_features(imgproc_core PUBLIC cxx_std_17)cxx_std_17是CMake內(nèi)置的特性名設(shè)置后如果編譯器不支持C17配置階段就直接報錯不會等到編譯到某個語法時才發(fā)現(xiàn)。7.7 調(diào)試CMake腳本最實用的工具最后分享一個實戰(zhàn)技巧message()是調(diào)試CMake時的首選武器。message(STATUS imgproc_core include dirs: ${CMAKE_CURRENT_SOURCE_DIR}/src) message(WARNING This branch is deprecated, consider refactoring) message(FATAL_ERROR Stop now, this config is invalid)FATAL_ERROR會在配置階段直接掐斷輸出紅色信息非常適合用來做前置條件校驗。我經(jīng)常在大型項目的配置邏輯里加一段if(NOT DEFINED REQUIRED_FEATURE_X) message(FATAL_ERROR Required feature X is missing, set -DREQUIRED_FEATURE_XON) endif()另外cmake --build build --verbose可以打印出實際執(zhí)行的編譯命令排查為什么參數(shù)沒生效時很有用。如果想追某條變量是怎么來的cmake --trace系列能打印配置階段每一行的執(zhí)行痕跡能把你從變量謎題里救出來。寫在最后我在實際用CMake幫模擬項目X完成所有這些重構(gòu)之后最大的感受是CMake真正的主戰(zhàn)場不是語法集錦而是構(gòu)建系統(tǒng)的維護成本。把target抽象用好、把傳遞依賴理清、把配置階段和構(gòu)建階段分清楚大部分項目場景都能應對。最后再分享一個小建議不要沉迷于把CMakeLists.txt寫成萬能模板。很多項目需要的東西就是那么幾條命令保持簡單直接讓人能看懂比炫技重要得多。等真有需求了再去查文檔按需加查一次用一次慢慢就會形成你自己的套路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
粉嫩av一区二区三区四季| а√天堂资源官网在线资源| 中文字幕一区av| 国产不良强奸视频免费看| 欧美国产操逼| 欧美 青青草| 在线播放成人网站| 91精品微拍福利| 哈哈操电影| 天天躁夜夜躁狠狠躁AV| 精品国产99| 一区二区偷拍拍视频| 草草影院最新网址| 国产综合在线视频网站| 天天日夜干| 操少妞在线视频| 综合国产97| 九九色逼| 天天操天天舔| 色呦呦呦在线观看视频| 欧美性爱三区二区| 国产白嫩漂亮KTV在线| 思思热在线视频免费| 有码专区最新中文字幕有码| 加勒比性爱成人在线| 伊人久久国产免费观看视频| 好湿好紧好爽 视频| 97久久超碰| 91精品人妻电影| 精品久久久久久无码| 999久久久| 国产一区二区二区按摩精品啪视频| 日韩中文9| 亚洲 另类 丝袜 自拍 动漫| 蜜臀色乳| 国产丝袜高跟美女av免费观看| 美女大乳久久久久久久女人18| 国产伦精品一区二区三区视频女| 在线播放成人网站| 欧美啪啪女女| 天天插天天射| 日韩人妻少妇 一区二区三区| 国产家庭乱伦网址| 怡红院视频在线| 懂色综合久久久| 丁香五月婷婷基地| 91一区二区三区蜜桃| 青青草吊丝| 中文久久一区| 人妻无码久久一区二区三区免费| 秋霞福利网| 蜜臀无码一区二区| 日少妇视频| 亚洲精品九九九| site:sinbotex.com| 日韩av性爱在线播放| 久久丁香久草综合网| 九九精品99| 黄色网址在线免费观看| 天天日日夜夜| 久久一二三四不卡 | 色偷偷色偷偷欧美日韩| 福利在线视频一区二区| 东京太热男人的天堂久久久| 日韩熟女无码| 91精品无码人妻系列| 亚洲另类电影| 天天享受天天看| 人妻素股| 亚洲欧美国产中文视频| 欧美啪啪女女| 亚州再线| 天天草天天日| 色噜噜狠狠色综合日日| 国产美女91视频| 中文字幕精品亚洲熟女| 手机午夜电影神马久久| 五月丁香| 人妻精品一区二区三区| 家庭乱伦性爱av| 五月丁香婷婷色| 中文字幕-区二区三区四区视频中国| 人妻无码一区二区三区久久99| 精品国产乱码久久久| 国产 日韩,欧美 自拍| 国产成年精品高清在线观看91| 国产福利av精彩对白| 人妻夜夜爽天天爽麻豆三区网站| 玖玖资源视频一区二区三区| 日韩无码精品综合久久| 精彩视频日韩| 亚欧免费观看视频| 久久黄色网址| 久久婷婷成人综合色怡春院| 精品国产www久久| 加勒比伊人综合| 春色91| 人妻丰满熟妇一区二区三| 亚洲欧美精品福利在线| 精品一区二区三区四区外站| 中文字幕久久婷婷丁香五月天| 日本一区二区不卡精品| 国产乱人妻精品入口| 国产99999| 插欧洲美女欧美精品| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 好湿好紧视频| 亚洲图片欧美在线视频| 国产人妻久久精品一区二区三区| 亚洲AV秘 精品久久老牛影视| 亚洲男人的天堂一区二区| 另类欧美色| 婷婷视频在线免费观看| 欧美色图91p| 欧差乱伦二三| 熟妇高潮精品一区二区三区下载| 精品国产91av一区二区三区| 97这里都是精品| 91精品91久久久中77777| 思思热在线观看| 91久热| 人妻激情偷乱视三区频一区二区| 欧日韩一二三f区| 韩日无码在线观看| 黄页网站成人免费| www.久久99| 人妻娇喘 激情视频| 日本性爱少妇| 激情小说亚洲| 日本A级视频| 日韩性爱小视频| 成 人 影视 一区 二区 三区 四区 | 欧美,日韩,中文,另类| 人妻丰满熟妇一区二区三| 欧美精品丝袜久久久中文字幕| 日韩视频中文字幕| 超碰综合色| 91午夜无码| 久久久999国产精品| 色香91| 精品久| 欧美色人| 国产性感骚丝袜在线| 国产不卡片| 精品三级在线专区| 亚洲在高跟鞋自慰久久在色线| 无遮挡一级毛片视频免费的| 色综合99999| 18禁超污无遮挡无码免费网| 久久黄黄黄| 丁香五月偷拍| 亚洲加勒比| 熟女一区二区| 性爱综合一区二区| av橘色网站| 久久国产精品91| 欧美日韩大香蕉| 北京美女一区二区| 9999久久久久| 久久国产性爱| 中文字幕第2页| av天天在线| 婷婷成人五月天| 精品丝袜无码一区二区三APP| 夜夜 中文视频rt| 免费看日本操逼视频| 国产视频人人网| 好舒服视频| 91久久久久免| 人妻精品一区二区在线| 日韩精品在线视频在线观看| 熟女人妻一区二区三区免费看| 97欧美精品综合| 日本亚洲熟女视频| 家庭乱伦国产| 91久久| 91九色丰满高潮| 一区黄二区黄| 久插综合| 91天美传媒精品| 日本在线一二 | 大黄片做爱的大的| a亚洲欧美色欲| 易易A毛视频| 1000午夜黄色| 黑丝日韩av丝袜av| 欧美亚男人的天堂| 色欧美天天| 无码乱人伦中文视频| 色呦呦国产精品免费看| 色欧美综合| 热久久无毒不卡| 美女主播色欲91抠b在线播放| 亚洲色天堂日韩中| 丁香六月啪啪| 91色情黑丝搞鸡在线观看一区二区三区三州| 亚洲无码国产精品久久| 亚洲人体视频在线观看| 亚洲欧洲日本精品中文a∨| 91精品国产91熟女| 91色亚洲| 久久久91| 天天综合97| 欧美成97爱| 大香蕉2017| 亚洲s色图| 97欧美日韩中文| 日韩欧美资源| 精品人妻伦一区二区三区久久| 欧美综合制服在线| 欧美大干日韩| 亚洲激情久久久伊人综合| 国产三级中文字幕粉嫩| 黄色激情电影在线观看| 欧美一级A一级a爱片久久| 百度百度日本操逼| 久久免费99精品久久久久久| 国产av又色又爽又黄| 丁香九月 婷婷| 午夜操逼不卡| 午夜久久无码1000合集| 婷婷五月天福利| 久热免费视频| 国产九九久久久精品| 91女人的网站| 亚洲性少妇| 啊啊啊啊在线播放| 国产91美女视频| 色噜噜狠狠色综无码久久合欧美| 夜夜草天天| 性爱免费视频成人| 综合色久| 欧美黑人与女人91~| 农村妇女精品一区二区| 91插B网站| 亚洲中文字幕在线视频一区二区 | 不卡超碰护士AV在线免费播放| 91麻豆天美国产| 亚洲色图 图片| 一区二区三区一亚洲中文字幕、综合区灬 | 欧美一区91大爱| 91夜夜蜜桃臀1区2区3区| 蜜桃一区二区三区| 2017天天操| 看免费的黄片| 激情专区综合| 久久一本大香蕉 | 一本大道不卡一二三区| AA丁香综合激情| 91久久久视| 99re6在线视频精品免费完整版安卓版| 久草看看看| 亚洲AV麻豆Aⅴ无码电影一| 色一色综合网| AV高清一区| 日产精品久久久一区二区| 麻豆国产97在线| 国产真实野战在线视频| 超碰在线974| 国产AV线| 被男人添B超爽视频| 婷婷在线播放| 成人开心网在线视频| 伊人天天久久动态图| 国产成人手机视频激情| 伊人色综合超碰| 欧美综色欧| 欧美aa一级片| 91扒丝袜综合在线| 欧美色图亚洲色| 日本视频在线观看污污污| 精品妇女一区二区三区| 91青青| 亚洲中文国际强奸字幕| 亚洲色图加勒比| 熟女少妇视频| 香蕉综合网| 天天爽入口| 夜夜操青青草| 自拍视频大全亚洲专媒视频/一区二区三区| 午夜一区| 婷婷五月成人| 亚洲情色 自拍| 日韩乱插| 色一区二区三区综合| 国产无码高清操逼视频| 少妇与黑人高潮在线| 四虎免费在线观看| 久久极品伊人| 极品另类| 色哟哟国产精品免费网址| 综合久久2017| 天美精品av| 久操视频这里只有精品| 六月激情婷婷| 人妻精品一区二区| 很很干很很操| 九九碰九九爱97超| 爱射综合| 国产亚洲色停停久久99精品91| 91N欧美| 亚洲综合九九| 一牛影视久久久一区二区三区| 一区二区高清视频| 中文字幕 一区二区 亚洲无码| 百度百度日本操逼| 亚洲综合小视频小说在线观看| yaouchengrenav| 久久久不能久久久久| 国产午夜在线观看| 久久久久网站-538在线视频-欧美永久乱码 | 天天久久久久久| 久综合网| 亚洲图片色图欧美另类| 久久精品国产久精国产| 极品色www影院| 99精品无码| 色色五月天婷婷| 日韩超碰97| 日本一区二区三区精品| av无码精品久久久久| 亚洲日精品| 天天操女人| 丰满岳乱妇一区二区三区| 超碰久草| 欧美日韩淫加| 国产成人久久久精品免费AV| 久久精品国产亚洲妲己影视| 亚洲国产福利视频| 日韩欧美麻豆大片| 91精品人妻电影| 久久久91| 国产成人天堂| 黄污污污污| 福利社区午夜一区二区| 日本亚洲嫩草影院啪啪| 97免费视频网| 婷婷五月天AV| 操逼视频免费日韩无码| av激情亚洲五月天| 超碰97极品9| 99re9这里只有精品| 国语av最新自产拍在线观看| 另类图片欧美激情综合| 超碰97国产欧美| 先锋音影AV| 天天射影院| 3d成人精品一区二区| 密臀在线一区尤物| 成人久久久精品| 欧美天天拍| 3p国产欧美99热| 26uuu性物| 一区二区三区国产在线播放 | 国产熟女免费观看久久| 一级岛国大片| 日本一区二区亚洲综合| 青青久日| 97视频在线观看网站| 高清不卡视频| 偷拍 精品另类 凸凹了四区| 在线观看中文av字幕| 国内毛片欧美香蕉精品| 啊啊啊啊操死我| 亚洲图片偷拍欧美| 欲女人妻性色av| 青青草久久一区网| 五月天春色激情网| 黄污污污污| 精品国产肉丝袜在线拍国语| 精品一区二区成人| 免费观看国产小粉嫩喷水精品午| 黄色免费网| 中文 人妻 制服| 人妻人久久精品中文字幕| 农村妇女精品一区二区| 青青草字幕AV| 91熟女视频网| 色哟哟av| 精品免费囯产一区二区三区| 午夜福利 成人 91| 农村少妇久久久久久久| 人人澡人人干| 啊啊啊啊啊啊啊啊在线观看| 99re99| 亚洲交性| 97综合网| 国产丝袜美女在线一区| 手机在线免费看的av| 国产女同在线观看视频| 亚洲精品尤物yw在线影院| A级片日韩欧美国产欧美视频精选观看| 精品999一区二区| 亚洲性天堂| 亚洲国产97| 亚洲图片欧美| 日本一区视频在线观看| 18禁的网站在线| 人人操人人摸人| 黄网色一区二区三区四区精品| 黄色视频特级毛片| AV色天香在线| 欧美日韩精品久久| 亚洲图片偷拍欧美| 超碰在线91| 国产精品久久久啊| 中文字幕奈奈美被公侵犯| 日va操| 五月天综合网| 日本裸体久久色噜噜| 亚洲在高跟鞋自慰久久在色线| 亚洲精品一区二区免费在线观看| 亚洲熟女一区二区| 国产在线视频午夜精华在| 国产福利一区二| 很黄很色的视频在线观看| 操逼逼无码| 欧亚洲精品有视频| 少妇丝袜在线观看AV| 天天综合网~91| 91内射| 欧美强奸乱| 青青操青娱乐| 一区二区三区色综合| 强乱老妇中文字幕| 精品国产无码中文| av中文在线| 精品乱子一区二区三区99| 久久久久久中文| 日本操逼视频在线| 久久久久久欧美精品se一二三四| 偷拍亚洲高清图片| 美女好片色日本| 91免费看一区二区三区| 去干网最新版| 嫩草影院永久在线制服丝袜| 97在线免费观看| 网页导航五月天免费一二三区| 美女诱惑爱爱| 国产又粗又长的视频| 91被操| 久久综合九九| 国产精品高朝久久久久久久| WWW操逼| 久jiu久神马影院| 大但人体久久久久| 免费又黄又裸乳的视频| 人妻91少妇| 国产精品久久久久久久AV大片 | 久久人体一区二区| 先锋激情∨在线视频播放| 一区二区三区四区色图| 97超碰精品图片| 无码高清专| 青青操在线亚洲视频观看欧美在线 | 加勒比伊人影院| 三级日本一区二区三区| 亚洲网自拍| 色综合一本| 欧美亚洲玖玖玖| 99rre在线精品99re8| 日韩成人精品视频自拍| 熟女AV一区| 成在线人在线观看视频| 激情终合网| 人人做,人人操,人人摸| 欧美白嫩在线放| 国产在线综合福利网站| 少妇同性| 亚洲伊人a线观看视频| 国产传媒1234区| 牛牛AV人人夜夜澡人人爽| 看日韩美女二区三区免费操逼视频 | 国产一国产一级毛片古装| 91久久久久久| 60秒不遮不挡| 麻豆天美久久91| 欧美激情综合| 中文字幕版| 亚洲精品一区二区精品| 亚洲精品蜜桃久久久久久久| 亚洲国产精品无码AV在线| 亚洲老司机123专区| 色呦呦呦在线观看视频| 精品丰满熟妇人妻一区 | 美女性91| 骚乳在线| 岛国片国产成人亚洲播放| 加勒比少妇AV婷婷六月天超碰超碰| 人人操人人插人人摸人人干| 91性| 五月天色色网站| 天天操天天舔| 日韩美女久久一区二区三区| 一级人妻性爱视频| 伊人96在线| 日本综合久久| 日韩精品在线视频,日韩精品……| 人妻在线臀日韩| 国产人妖的免费的视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久是精品| 1024香蕉视频| 影音先锋乱伦资源| 久久宗合97| 少妇国产不卡| 国产三级日产三级韩国三级| 操逼视频色| 五月天AV资源| 成人熟女视频一区二区三区| 3D污黄视频在线观看| 久久久偷拍| 久久久婷| 久久乐| 亚洲成人一区二区精品| 97超碰欧美| 69丨亚洲丨精品丨入口免费播放| 欧美大码在线视频| 中文字幕在线日亚州9| 日韩免费高清大片在线| 综合色区偷拍| 欧美aⅴ99久久黑人专区| 久热伊人| 国产操逼逼网| 手机午夜电影神马久久| 狠狠入| 超碰午夜| 激情图片亚洲色图| renqi久久久久久久久久久久| 国产精品嫩草久久久久| 日本一区不卡| 久久女人| 欧美伊人电影| 亚洲日本天堂| 欧亚成人在线视频| 日韩少妇丰满亚洲| 97AV爱| 狠狠干狠狠色| 日韩成人网址| 黄aaaaaaaaaaaaaaaaaa色网站 | 亚洲天堂性爱| 91天射| 日韩一级二级三级| 国产高清成人免费视频| 一区二区亚州激情久婷婷欧美 | 日本一级不卡一二区| 色噜噜国产在线| 久久久婷| 黄色高清无码无码破解免费暗网 | 任我爽视频在线观看| 婷婷综合久久| 再深点灬舒服灬太大了好硬好爽| 久久直播国产| 二男一女成人A片| 蜜乳AV免费观看| 欧美亚洲| 欧美性爽xyxOOOO| 日本成人在线不卡一区二区三区| 97天堂| 91丨人妻丨国产丨丝袜| 九九碰九九爱97超| 91天天看| 高清无码久操视频| 日逼逼免费看| 91小视频| 成人在线日韩| 天美av在线观看| 久久久9视频| 99re69综合| 天天α片| 色五月激情AV在线| 美女黄色91| 日韩有码中文字幕女同性恋| 九九草| 国产成人在线观看网址| A级国产欧美激情在线| 欧美精品久久96人妻无码| 美女天天干| 久久受www免费人成| 国产隔壁老王影院在线| 久操网无码在线| 午夜呻吟欧美| 大香蕉之青青草原| 久99在线免费观看视频| 国产传媒日韩欧美| 国产日韩欧美中文在线播放| 亚洲性爱无码乱伦av| 成人av免费观看| 800zy一区二区| 91强在线播放| 性一级黄色录像片网站导航| 超碰97人人cao| 色色福利| 97二区四区| 欧美久久久| 久久岛国| 人妻一区视频| 麻豆久久视频在线地址| 国产一区二区三区久久精品太古里| 91国产伊人大香蕉| 天天影视色香欲综合网小说| 思思性爱| 国产福利夜| 日本幼女18+| 久久黄片国产一区二区| 婷婷视频网| 中国黑人三级片网站上区| 日本久久久精品电影| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 成人九九| 国产51色综合久久免费| 志村玲子视频一区二区| 亚洲精品97中文字幕| 国产精品视频在线观看| 成人福利视频网| av情色影音| 91精品丝袜久久久久久| 日韩色欲久久一二三四区| 久久国产精品91| 国产夫妻性生活视频| 综合av社区| 国产成人亚洲精品自产在线| 肉丝中文无码高清| 乱伦a片视频| 亚洲不卡av在线| 在线二区不卡| 亚欧性爱ab| 日韩人妻精品中文字幕| 久96热在线观看视频| 婷婷五月天网| 亚洲狠狠入| 国产 v乱码一区二| 亚洲综合69| 黄色片,com| 成人日本精品九区| 偷拍精品一区二区三区| 在线黄页看毛片| 992视频一区| 色婷婷五月综合激情中文字幕| 久久日本熟女精品一区| 人人 操人人 操人人| 日本不卡三级网在线播放| 性色aV一区二区三区噜噜| 婷婷激情四射| 国产一二三福利视频网| 色色色欧美| 婷婷人妻激情| 国产刺激视频| 神马久久久久久| 国产欧美日韩在线观看麻豆传媒公司| 丰满人妻一区二区三区四区| 欧洲色色| 国产伦精品| 美女尤物福利视频| 国产精品美女视频诱惑| 超碰激情808| 久久精品 六十路 熟女 欧美| 中文字幕55555| 天天谢天天干| 亚洲国产青青| 五月婷婷AV| 91亚洲欧美激情| 97精品国产97久久久| 97超碰人人操人人操| 国产丰满熟夫69mpp| 做爱A级亚欧| 国产九九九九九九| 69人妻精品一区二区绯色| 亚洲综合在线第一页| 亚洲情色婷婷五月天| 在线观看亚洲成人精品| 人妻丝袜肏逼| 日本片日本片祼观看网站在线看中文版网页在线看 | 午夜国产综合视频在线观看| 97精品第3页| 亚洲最大AV网| 蜜臀99久久| 国产亚洲日本| 五月天社区| 欧美呦呦性爱| 色与欲影视天天看综合网| 日本三级黄页| 一级特黄aaa大片在线观看成人一级片在线观看 | 久久久天堂| 亚洲中文制服诱惑| 亚洲成熟国产精品美女| 一区二区不卡视| 伦在线97| 中文字幕五区| 人人操人人搞人人草| 青娱乐黄色录像| 97天天操天天干| 九九色热| 色伊人91| 在线午夜成人无码视频| 国产精品乱码久久久久久久| 色婷婷电影网| 国产日韩欧美亚洲精品95| 日日摸日日碰夜夜爽视频| 色五月第四色| 欧美天天拍| 天天干天天操天天干天天操| 精品无码欧美三级| 久久久久久十| 智利AV在线网| 一区二区三区蜜桃成人撸久久东京热 | 欧美网站免费| 韩三级a视频在线观看| 91亚洲网站| 亚洲AV在线资源| 麻豆天美制片厂网站视频| 婷婷爱五月| 乱伦日本色图AⅤ| 国产精品成久久久久午夜午夜| 欧美日韩不卡传媒| 亭亭在线资源| 免费久久9999| 欧美性,色九九| 欧美|91色综合| 9999免费精彩视频| 欧美性巨大╳╳╳╳╳高跟鞋| 欧美视频一| 97天天| 国产9熟妇视频网站| 亚洲电影91| 蜜臀99999| 欧美日韩理论一区| 成人AV素股で擦久久| 天天干一干| 综合啪啪| 欧美性生活综合| 成人三级片无码| 丝袜剧情| 亚洲超碰AV| 亚洲一本色道中文无码aV天美| 午夜福利av电影在线| 黄视频免费| 蜜乳成人AV| 久久久国产av美女私房| 超碰在线欧美性爱激情| 欧美人黑A片无码免视费| 99精品人妻| 久久国产乱子伦精品免费女,网站| 黄页网站成人免费| 婷婷性网| 亚洲不雅视频1区二区| 99999亚洲| 97超碰欧美| 欧美日韩大香蕉| 超碰色男人操熟女| 黄色一区二区秘书性感| 日本五十路熟女一区二区| 无色无码| 91婷婷| 1024亚洲中文字幕久在线看片你懂的 | 国产农村妇女一区二区| 精品四五区| 亚熟在线| 久久99深爱久久99精品| 亚洲第二页| 97爱爱爱| 一区二区三区黄色片a| 日本高清有码网址视频| 五月天婷婷成人网| 国产人伦精品一区二区三区 | 国产成人五月天丁香花| 91美女网站| 久久久久久久伊人精品| 丝袜美腿制服人妻二区中文字幕 | 欧美色图私拍91| 天天摸天天舔天天操| 欧美综合亚洲| 日本一级真人黄色性爱视频| 色就色综合| 亚洲国产激情国产av| 啪啪视频mP4| 夜夜操中文字幕| 欧美综合色,www| 日本国产亚洲一区在线观看| 人人爱人人操人人性| 亚州精品一区二区三区香中文字幕在线| AV一二区| 视频在线97| 边做饭边操逼逼| 一个人免费HD91视频| 国产日本熟女顶级一区二区三区视频 | 亚洲精品国产熟女久久久| 少妇天堂| 乱伦av麻豆| 97玖玖人妻| 玖玖综合视频| 无码操逼视频一下| 婷婷激情四射| 欧美色图91p| 黑人娇小av在线播放| 亞洲久久直播| 岛国AV一区二区电影| 蜜桃臀av一区二区| 人人艹亚洲| 天天日老熟妇| 东北女人性交| 国产浮力影院第1页| 日韩一区二区熟女| 欧美日韩欧美| 日韩在线观看字幕精品| 亚洲欧美九九九| 四虎影视欧美| 婷婷中文网| 久久夜夜夜| 国产又黄又粗又猛大片| 久热9| 97欧美久久久久久久| 久久这里只精品免费福利| 激情深爱五月天| 精品一区99999| 在线观看无码三级少妇| 蜜色网色哟哟| 美女久久久久久久久久久| 亚洲砖码砖专无区2023| 嗯嗯,好大,好爽,好骚| 日本不卡一区| 综合色图,成人综合网| 天天影视91看看| 亚洲日韩美女中文字幕乱| 亚洲欧美性生活| WWW.操逼.COM| 蜜桃传媒一区二区亚洲| 中文乱码字幕观看视频| 玖玖婷婷五月天| 熟妇人妻一二三区免费| 久久一区二区三区入口| 高清不卡 中文 人妻| 亚洲囯产精品女人久久久| 日日骚 av| 丁香五六月啪啪| 亚洲瓯美色图| 懂色中文一区二区三区| 欧美无圣光在线| A一区片| 国产熟妇一区二区| 精品人妻1区| 久久久网一区| 人人人人插| 精品一区99999| 性色av婷婷久久一区二区点复制| 五十路熟女在线不卡观看一区二区| 日韩在线观看字幕精品| 997色在线| 亚洲激情网| 97超碰人妻| 91麻豆天美传媒HD| 乱伦av麻豆| 久久精品一区一起草| 久久99热这里只频精品6学生| 91日韩国产欧美亚洲另类精盘州至城都 | 人人超碰在线观看黄| 欧美性爱免费短视频| 亚洲电影91| 99热在线观看| 亚洲国产精品无码AV久久| 九九英色视频| aaaa少妇高潮大片| 91性情| 玖玖综合色| 韩国午夜理伦三级好看| 亚洲情色 自拍| 清清一区二区三区四区不卡视频| 国产精品日韩在线一区| 国产91专区| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 久久五月天婷婷丁香中文字幕| 欧美色图在线视频少妇| 久久久久久久人妻| 久久精品 六十路 熟女 欧美| 骚逼一区二区| 97人人超| 久久久亚洲Av| 日本大香蕉综合网红本杳社区| 国产有码一区| 色综合久久88色综合久久天天| 久久无码精品| 1024手机看片欧美日韩| 99无码精品| 国产成人一级av88| 熟妇人妻丰满久久久久久久无码| 欧美香蕉视xxx| 国内精品久久久久影院亚洲| 思思久热在线精品66| 男人天堂免费| 嗯嗯啊啊啊好舒服| 日韩操人| 无码日韩人妻av一| 亚洲爽图| 天天日天天干天天摸天天操| 中文字幕视频2区| 无码国产精品午夜不卡(| 成人五级久久| 亚洲熟女综合网| 久久原创中文| 东京热一区二区三区四区五区六区| 日韩不卡av一二三| 久久首页| 高清有码一区二区| 欧美姓爱综合网| 综合性视频99| 蜜桃色院一区久久 | 精品黄色电影| 四虎免费在线播放| 中文字幕AV片| 人妻美腿丝袜制服诱惑综合天堂-| 韩国一级做A片免费的| 国产精品一区二区亚洲人成毛片| 超碰97亚洲| 91n处女在线观看| 亚洲欧美91√| 欧美大片一区二区三区| 欧美九九99久久精品| 成人五月香网在线| 玖玖色综合| 自拍偷拍2025在线观看| 在线观看免费视频国产| 一本色道综合久久欧美| 午夜精品久久一区二区| 91丰满| 久久久久女教师免费一区| 伊人在线大香蕉视频久久| 都市激情人妻一区二区青青操视频| 久久免费中文字幕在线观看| 乱人伦 国语对白:视频直接看| 精品一区二区成人动漫| 人人干人人搞人人摸| 日本色色色色色视频| 国产高清26uuu| 久久久久久亚洲中文| 欧美日韩另类在线播放| 日韩极品无码B| 亚洲日韩视频二区| 久久久99免费| 人妻啪| 黄色区免费观看中文字幕| 色色色欧美| 婷婷中文网| 综合一区中亚洲国产成人综合精品| 抽插无码高清一区| 亚洲高清无码免费观看视频| 日韩午夜啪啪视频| 天天干一干| 青青青国产| 97亚洲资源| 色网综合网| 天操天操夜操夜月月年年操操| 成人情色综合网| 中文区中文字幕免费看| 精品九九九九九九| 日本中文字幕不卡视频| 操逼日批| 乱伦AVxx| 五月丁香激情综合网| 欧美熟妇视频| 久久国产精品熟女人妻| 久久精品男人的天堂| 久久在肏| 日韩AV无码网站| 久久久久久国产精品免费网站| 丁香九月激情啪| 奸色色 男人天堂 天天射| 操操操操操操| 蜜桃臀AV在线| 久久精品熟妇丰满人妻99| 一级性爱视频免费观看| 性久久| 久久人妻视频| 伊人国产视频| 久久这里只精品| 日韩无码一级黄色av片| 999亚洲国产视频| 激情网五月天| 中文字幕十五区| 午夜亚洲| 国内毛片无遮挡国产| 国产精品久久久久综合| 美女黄页| 大干人妻| 大屁股人妻女教师撅着屁股| 欧美三级中文字幕hd| 久久免费中文字幕在线观看| 青草视频人妻在线观看| 欧美中文综合| 成人aⅴ一区二区三区| 中文字幕在线观看丝袜| 亚熟hd视频在线| 国产97亚洲| 欧美操逼熟女| 国产久久久9999| 99精品无码| 日韩高清黄片| 无码免费一区二区三区啪啪| 天天日美女的B| 丁香婷婷五月| 五月丁香婷婷色| 欧美日韩亚洲电影| 国产精品久久aV| 色婷婷丁香五月天| 日日干夜夜欢| 欧美夜夜草视频| 人人操av| 91网站18+| 搞中出久久| 久久精彩视频9| 97神马久久| 国产视频一区二区免费| 欧美成人色| 欧美日韩国产成人高清| 日韩精品一二三四| 久草成人影片| 欧美亚洲尤物久久| n1038 一二三区| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 91亚洲欧美色图| 蜜桃久久一区二区| 激情婷婷| 亚洲成人在线乱码色午夜| AV污污污污| 97在线青| 福利操逼| baiduhicn.com。| 黄片视频观看| 福利风月五月天影院| 亚洲男人天堂av| 偷拍 精品另类 凸凹了四区| 91性网| 九九热在线精品视频| 国产美女91| 久久婷婷伊人| 欧美狠狠狠| 五月婷婷大香蕉| 男人天堂新在线| 一区二区激情国产熟女| 久热伊人| 亚洲不卡AV在线| 中文字幕欧美丝袜07资源| 久久久久成人蜜桃精品| 91精品国产一区三一| 亚洲欧美精品一区天堂久久 | 日韩欧美视频青青| 亚洲欧美情色| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 久久婷婷国产一区二区色| 久热一区二区| 中文字幕乱碼在线| 国产日韩区| 啊啊啊啊好疼视频| 国产福利第一视频| 欧美综合网A| 一区=区三区视频| 亚洲色系另类精品国产| 国产欧洲精品亚洲午夜拍精品| a级理论午夜日本| 狠狠爱夜夜| 国产怡红院| 国产一区二区a毛片| 亚洲熟妇AV日韩熟妇在线| 婷婷亚洲色| 亚洲综合电影| 日本99一区二区| 久操视频资源站公开| 大香蕉人妻久久| 夜夜嗨AV蜜臀av| 在线观看岛国有码| 97网色| 9久久美女首页| 国产AV高清AV无码| 超碰97色| 91无摭挡| 色妹子A V| 国产精品无码久久久久2028| 欧美综合中文| 5252色欧美在线| 99热这里只有精品地址| 女性91网站| 亚洲天天影视色综合| 99在线精品视频| 三级色综合| 97天天| 男人精品天堂一区| 67914亚洲精品| 黄色电影观看久久9| 欧美不在线| 天天躁狠狠躁av| 91在线美女| 自拍偷拍2025在线观看| 国产精品久久久吖| 噜噜瑟| 9久久美女首页| 久7色| 无码国产精品久久久久| 午夜小电影在线插入淫高潮| 春色综合免费| 欧美亚洲一区二区久久久婷精品大包诱| 亚洲无线码一区国产欧美国| 亚洲春色一区二区三区| 国产三级中文字幕粉嫩 | 一起草视频在线| 长久操视频| 国产性感在线观看| 五月丁香综合| 國產尤物AV尤物在線觀看| 国产精品久久久久久久无码AV| 老鸭窝成人| 乱子伦一区二区三区国产精品| 九九热精品免费视频| 九九色逼| 国产美女mm131爽爽爽爽| 三级日本一区二区三区| 密臀在线一区尤物| 狠狠操狠狠燥| 超碰98综合网| 国产人伦精品一区二区三区| 开心五月深爱五月| 操逼网站视频漫画国产| 一二三四视频中文字幕在线看| 超碰在线一区| 老鸭窝成人免费毛片视频| 人人妻人人色一区二区三区| baiduhicn.com。| 日少妇亚洲版| 人妻在线中出视频| 久久精品欧美一区蜜桃| 97色干| 成人在线视频网| 欧美亚洲中文字幕| 亚洲一区二区性爱电影| 国产中文精品一区二区在线观看| 欧美性爱18观看| 男女日B国产| 国产亚洲精品一区二区三区| 国产福利合集| 色综合一区二区三区| 天天干电影| 精品91| 日本欧美中文字幕| 91狠狠综| 囯产精品久久久久久久久久梁医生| 日本不卡二区| 少妇被c 黄 免费观看| 国产 日韩 欧美一区| 欧美亚洲国产日本在线,久久精品国产| 中文字幕av一区二区三区人妻少妇| 91欧美另类| 久久精品视频一区三区小泽玛利亚| 今日头条成人一区二区三区四虎精品| yiren97| 欧美性生活内射| 欧美亚洲涩涩| 久久久久久久9最新免费视频观看| 91欧美性| 噜噜噜噜天天狠狠| 天堂综合网| 色波多| 久久男人精品|