亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

CMake實戰(zhàn)進階:從Makefile到跨平臺構(gòu)建系統(tǒng)的完整指南 寫在前頭我正在整理一份完整CMake教程。前陣子有朋友跟我抱怨說代碼在自己電腦上跑得好好的換到Linux服務(wù)器上編譯直接掛掉一查頭文件路徑全寫死成本地目錄格式了。我問他為什么不用CMake他的回答很有意思那玩意兒太復(fù)雜我寫了三年Makefile都沒弄明白。這話我聽過不止一遍。但說實話CMake根本不需要當(dāng)一門編程語言去啃。它更像一個資產(chǎn)管理工具幫你把編譯哪些文件、用什么參數(shù)、依賴什么東西、裝到哪里去這些事說清楚剩下的事它自動干。這篇文章我會用模擬項目X一個叫imgproc的小圖像處理庫從單文件到可安裝發(fā)布版的完整過程把CMake里真正常用、真正容易踩坑的知識點挨個過一遍。適合兩類人C/C項目剛起步、覺得Makefile難以維護的新手以及已經(jīng)會用CMakeLists.txt、但一直靠復(fù)制粘貼改改、不太理解背后邏輯的進階用戶。1. 為什么是CMakeMakefile解決不了的那攤子事先聊動機。很多人寫C/C程序最初的構(gòu)建方式就是一條gcc命令后來文件多了就上Makefile。但Makefile有個天生缺陷它描述的是一條條具體的構(gòu)建命令而這些命令依賴具體的操作系統(tǒng)、編譯器、路徑風(fē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批處理文件負責(zé)Windows下的構(gòu)建。每次改依賴、加目錄、調(diào)參數(shù)兩邊都要同步改稍不留神就漏一處然后就是長達半天的心智損耗排查。1.2 CMake的核心思想描述目標(biāo)而不是描述命令CMake換了個思路。你的CMakeLists.txt不寫怎么編譯只寫這個項目有哪些目標(biāo)(target)每個目標(biāo)包含哪些源文件、需要什么頭文件路徑、鏈接什么庫。至于編譯器怎么調(diào)用、靜態(tài)庫叫什么后綴、路徑用什么分隔符CMake會在配置階段根據(jù)當(dāng)前平臺的默認規(guī)則自己搞定。這就是它自稱為元構(gòu)建系統(tǒng)的原因CMake本身不直接編譯代碼它根據(jù)一份抽象描述生成當(dāng)前平臺最合適的構(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)分析工具互不干擾隨時切換。這也是為什么我們習(xí)慣用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è)置項目名以及探測當(dāng)前環(huán)境支持的C/C編譯器。add_executable是主角命令聲明一個可執(zhí)行目標(biāo)。目標(biāo)是CMake里的頭等公民后續(xù)的include路徑、編譯選項、鏈接庫全部圍繞目標(biāo)展開。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寫法更直白尤其當(dāng)源碼目錄和構(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這條命令值得重點講。它把某個頭文件搜索路徑作用到指定目標(biāo)上PRIVATE表示這個路徑只對imgproc_demo自己有效。后續(xù)如果別的目標(biāo)也要用這些頭文件得單獨聲明。2.3 拆庫add_library、target_link_libraries與依賴傳遞代碼量繼續(xù)上漲main.cpp引用的函數(shù)越來越多編譯單元之間的依賴也亂了。這時候一個想法很自然把圖像格式解析和濾波算法拆成一個獨立的庫讓main.cpp只做入口邏輯順便以后寫單元測試時不用重復(fù)編譯全部源碼。于是拆成一層靜態(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ù)初學(xué)者最容易懵的地方。我給個生活化解釋你家的書房imgproc_core里有一些頭文件對外暴露的接口你兒子imgproc_demo要借用書房的資料你得告訴兒子這些接口在哪兒。問題是兒子以后要不要把書房的位置轉(zhuǎn)告給他的朋友另一個目標(biāo)PUBLIC表示我用了而且我的使用方式導(dǎo)致我的依賴方也得知道這些頭文件路徑PRIVATE表示我只是內(nèi)部實現(xiàn)用了外部不需要知道。翻譯到代碼里就是PUBLIC會把自己的include目錄、編譯定義、鏈接庫一并傳給下游目標(biāo)PRIVATE只留在當(dāng)前目標(biāo)自己這層。3. 變量、選項與生成器表達式配置階段的分支邏輯當(dāng)項目規(guī)模再上來你會發(fā)現(xiàn)CMakeLists.txt開始寫成程序的樣子要定義變量、要根據(jù)條件走不同分支、要根據(jù)不同構(gòu)建類型施加不同參數(shù)。這一章我們把CMake的編程能力說透。3.1 set變量與緩存變量set(VAR value)定義的是普通變量只在當(dāng)前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) # 判斷變量是否已定義實際工作中我建議用帶上引號的寫法避免變量值未定義時報錯或者被當(dāng)作路徑解析if(${BUILD_TESTING})3.3 生成器表達式配置階段最后的靈活手段這是CMake里最抽象的概念也最值錢。普通變量在配置階段就被固定成字符串了而生成器表達式(Generator Expressions)可以推遲到構(gòu)建階段才求值所以它能拿到每個具體構(gòu)建目標(biāo)、具體配置類型的信息。最常用的幾個生成器表達式表達式含義$TARGET_EXISTS:name目標(biāo)是否存在$TARGET_NAME_IF_EXISTS:name目標(biāo)存在則用目標(biāo)名否則返回空$CONFIG當(dāng)前構(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以及目標(biāo)級命令如target_include_directories、target_compile_options。我強烈建議新項目一律用target_系列。原因很簡單作用域。目錄級命令一旦執(zhí)行影響的是整個目錄及其子目錄的所有目標(biāo)后面對某個目標(biāo)單獨調(diào)整時很難精準(zhǔn)覆蓋。目標(biāo)級命令則精確控制到單個目標(biāo)依賴傳遞關(guān)系也清晰。小項目感覺不明顯一旦目標(biāo)一多全局影響就是排查問題的黑洞。4. 第三方依賴find_package與FetchContent的分工C/C項目很少是不依賴任何第三方庫的。模擬項目X開始需要一個JSON解析庫需要接SQLite。這一章講依賴管理的兩種主要手段。4.1 find_package尋找系統(tǒng)里已經(jīng)裝好的庫find_package有很多人無腦用但理解它分兩種模式很有必要。Module模式CMake自帶的FindXXX.cmake模塊負責(zé)在系統(tǒng)里找?guī)煺业胶笤O(shè)置XXX_FOUND、XXX_INCLUDE_DIRS、XXX_LIBRARIES變量。Config模式庫本身安裝時提供了xxx-config.cmake文件里面定義好了導(dǎo)入目標(biāo)imported targetfind_package執(zhí)行后你可以直接用target_link_libraries(app PRIVATE xxx::xxx)這種帶命名空間的方法鏈接。后者是現(xiàn)在的趨勢因為導(dǎo)入目標(biāo)把頭文件路徑、鏈接庫、編譯選項、甚至依賴的其他庫都打包好了使用方不需要自己拼路徑。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)建時直接拉源碼如果你需要的是某個特定版本的庫而且希望整個項目可復(fù)現(xiàn)、不依賴系統(tǒng)環(huán)境FetchContent是更省心的方案。它會在配置階段把源碼下載到構(gòu)建目錄里然后通過add_subdirectory把庫的目標(biāo)直接加進當(dāng)前構(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庫的目標(biāo)會自動加入直接用target_link_libraries(imgproc_core PRIVATE fmt::fmt)鏈接即可。我在實際使用中一般指定下載源碼包或Git tag并鎖定hash避免某些鏡像不穩(wěn)定或上游倉庫變動導(dǎo)致構(gòu)建突然失敗。4.3 兩種方式的選擇思路場景選哪個系統(tǒng)管理員已裝好特定版本庫希望直接用find_package項目要完全可復(fù)現(xiàn)不依賴他人環(huán)境FetchContent依賴庫較大編譯一次耗時較長優(yōu)先find_package減少無謂編譯依賴庫較小、單個頭文件為主FetchContent更簡單我的習(xí)慣是外部依賴盡量優(yōu)先find_package當(dāng)某個庫在常見環(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對應(yīng)多線程調(diào)試DLLRelease對應(yīng)多線程DLL混用會直接鏈接報錯。5.3 編譯選項的精準(zhǔn)投放基于上面的分析我一般會在項目里這樣配置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é)如果你給某個目標(biāo)開啟了-marchnative那這個庫編譯出的二進制就只能在本機或相同指令集的機器上跑。分發(fā)到別的機器前要重新評估。真實項目里我傾向于不加-marchnative改用-O2兼顧通用與性能。6. 安裝與導(dǎo)出讓構(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)較復(fù)雜也可以用install(DIRECTORY src/ DESTINATION include/imgproc FILES_MATCHING PATTERN *.h)打包安裝。6.2 導(dǎo)出包配置文件光安裝庫和頭文件還不夠還需要告訴別的項目我提供了什么目標(biāo)、依賴什么庫、版本是多少。這一塊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 )對應(yīng)的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目標(biāo)名這是CMake社區(qū)現(xiàn)在推薦的風(fēng)格能有效避免不同庫之間的目標(biāo)重名沖突。6.3 構(gòu)建樹導(dǎo)出與安裝導(dǎo)出的區(qū)別export(EXPORT ...)和install(EXPORT ...)都能導(dǎo)出目標(biāo)但用處完全不同。export導(dǎo)出的是當(dāng)前構(gòu)建樹里的目標(biāo)只在這臺機器上、這個構(gòu)建目錄里有效主要用于同一個工程內(nèi)的子項目互連。install(EXPORT)則生成安裝樹里的配置文件跟著庫一起部署到系統(tǒng)里這是面向其他項目的接口。實際交付外部庫時我?guī)缀踔挥胕nstall導(dǎo)出。如果只是內(nèi)部多個可執(zhí)行文件共享代碼是不需要走安裝這一步的直接add_subdirectory加target_link_libraries就夠了。7. 避坑清單這些年踩過的CMake坑CMake語法不難坑都在細節(jié)里。這一章集中記錄我在實際項目里反復(fù)踩過的幾類問題很多是從同事和社區(qū)里學(xué)來的教訓(xùn)。7.1 不要用CMAKE_SOURCE_DIR判斷當(dāng)前項目路徑CMAKE_SOURCE_DIR指向最頂層源碼目錄PROJECT_SOURCE_DIR指向最近一次調(diào)用project()的目錄。如果你的主項目通過add_subdirectory引入了一大堆別的項目這些宏的取值會不一樣。# 在子項目里用 ${CMAKE_SOURCE_DIR} 時指向的是主項目根目錄不是當(dāng)前子項目 target_include_directories(imgproc_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)正確姿勢是${CMAKE_CURRENT_SOURCE_DIR}它永遠表示當(dāng)前CMakeLists.txt所在的目錄。每當(dāng)我看到${CMAKE_SOURCE_DIR}/src這種寫法第一反應(yīng)就是查這個變量用在了哪個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里。有些同學(xué)排查問題時喜歡直接編輯這個文件改完當(dāng)時有效下次配置又被覆蓋而且格式稍有差池整個配置就壞了。我的建議是改緩存值一律用命令行cmake -S . -B build -DCMAKE_BUILD_TYPERelease如果你發(fā)現(xiàn)改了之后沒生效先把build目錄刪掉重新配置。構(gòu)建系統(tǒng)損壞時的經(jīng)典操作就是刪掉構(gòu)建目錄再重新來這比任何修復(fù)都干凈。7.4 add_subdirectory與FetchContent的二進制沖突當(dāng)一個庫既可能被add_subdirectory引入又可能被FetchContent引入或者同一個庫在項目的不同層級被多次加入時會碰到目標(biāo)重名最常見的報錯是add_library cannot create target ... because another target with the same name already exists。解決辦法是先用find_package探測探測不到再用FetchContent或者給子項目加上統(tǒng)一的前綴路徑。這里有個很實用的習(xí)慣在fetch新依賴時指定EXCLUDE_FROM_ALL避免它的所有目標(biāo)都默認參與全量編譯否則構(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標(biāo)準(zhǔn)設(shè)置引用全局變量不如目標(biāo)級設(shè)置set(CMAKE_CXX_STANDARD 17)是全局設(shè)置對之后創(chuàng)建的所有目標(biāo)生效但也容易影響通過add_subdirectory引入的其他子項目。推薦做法是把標(biāo)準(zhǔn)設(shè)在目標(biāo)級別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)建階段分清楚大部分項目場景都能應(yīng)對。最后再分享一個小建議不要沉迷于把CMakeLists.txt寫成萬能模板。很多項目需要的東西就是那么幾條命令保持簡單直接讓人能看懂比炫技重要得多。等真有需求了再去查文檔按需加查一次用一次慢慢就會形成你自己的套路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色性荡荡荡荡视频| 亚洲女毛多水多21P| 91+欧美| 一本一道波多野毛片中文在线| 99久草| 校园春色欧美| 久日91在线| 一块操欧美| 凹凸久久人人| 日本一区二区成人在线| 国产免费久久久久| 亚洲偷拍自拍在线视频| 欧美aa一级片| 影音先锋每日最新资源在线观看| 五月天人妻综合| 亚州操操穴网| 99啪| 狠操91,com| 久久超碰亚洲人| 狠狠操狠狠| 嗯啊抽插大香蕉网页| 国产精品懂色tv影视免费观看| 1204人成网站色www| 亚洲日韩东京热一区| 91青视频| 日韩女优在线| 极品白嫩福利在线| 无码人妻丰满熟妇奶水区毛片| 偷窥自拍亚洲天堂网爆| 手机看片1024你懂的国产| jk白丝没脱就开始啪啪| 国产三级多多影院2022国产AA一级毛片无码| 亚洲美女AV无码| 欧在线一二区| 婷婷久久五月综合激情| 黄骗免费网站| 亚洲高清无毛一区二区| 久久精品国产99精品亚洲蜜...| 91在线免费精品视频| 成人怡红院| 精品黄色电影| 密乳AV免费观看| 中文AV制服乱伦| 日韩欧美亚欧在线视频| 18禁免费视频| 91 亚洲 欧美 日韩 国产 综合| 亚洲图片激情综合另类| 国产高清在线观看欧美| 国产美女mm131爽爽爽爽| 岛国网址国产 | 视频不卡中文字幕| 久久久久久久强迫| 精品久久久久久中文| 国产精品无码av| www.av在线观看| 免费操逼视频下载| 丝袜av一区二区三区| 欧美性生活内射| 98福利在线视频| 亚洲 欧美 综合 91| 久久久久国产| 国产精品久久久久久久黄无码| 日韩激情无码影院| 国产 亚洲 丝袜 制服| 在线精品福利免费播放| 久久久无码国精品无码三区三区| 色诱中文字幕| 加勒比av网| 另类欧美色| 92性色国产午夜福利在线661 | 澳门成人网站久国产日韩| 精品国产一区二区三区久久久蜜臀| 97天天操天天干| 天堂精品一区| 美女黄网| 翔田千里av一区二区三区| 国产又粗又又黄又猛| 国产精品视频播放| 97天堂| 丁香六月激情| 欧美在线伊人色| 国产噜噜噜噜噜久久久久久久久| 日韩av性爱在线播放| 黄色视频特级毛片| 啊啊啊好舒服好爽啊啊啊视频| 国产久久男人天堂| 亚洲97成人在线观看| 国产97视频免费观看| 中文字幕在线播放2中文字幕在线观看2| 欧美无圣光在线| 成人午夜视频免费播放| 色女99一级片在线观看| 日本久久久久久久久久| 国产做?爰片久久毛片?片美国| 久久大香蕉手机高清视频| 人妻少妇久久| 亚洲乱码尤物193YW| 97超碰jingpin| 亚州精品人妻一二三区| 囯产乱伦一区二区三女| 亚洲综合九| 无码国产精品96久久久久孕妇| 男人的天堂一区三区| 97超碰逼| 日语五十路和六十路亚洲国产精品| 怡红院一区二区熟女人妻| 青草香蕉网| 国产免费内射视频| 国产精品女同| 日本欧美中文字幕| 夜夜夜久久| 欧美 亚洲| 国产无套粉嫩白浆在| 97综合国产精品高潮久久| 欧美色97| 欧美久久九九| 欧美色999| 黑操B| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 亚洲色图欧美色图制服丝袜| 五月丁香黄色网| 日本 成 人 小说 电影 一区二区| 人伦四五区| 操逼网站视频漫画国产| 熟女久久| 日韩9999| 狼狼色丁香久久婷婷综合五月| 2025亚洲男人天堂| 99亚洲国产精品色一区二区三区| 亚熟在线| 无码精品人妻一区二区三区妖精| 蘋果手機免費看成人Av| 嫩草一区二区在线观看| 91痴汉| 精品区国产区一区二区三区| 免费观看的黄色的网站| 国内一区二区免费| 91国产美女丝袜足交精品视频| 看免费一级在线播放毛片| 日本少妇va7777| 亚洲欧洲自拍图片专区满春格| 偷拍欧美激情| 色色色五月婷婷| 中文字幕在线观| 91麻豆天美国产| 精品一区二区综合熟妇| 欧美在线第五页| 色婷婷九月| 久久久久97| 国产美女精品| 五月天色色网站| 屁股久久久久久| 中文字幕十五区| 国产强奸超碰AV| 亚洲色电影在线| 久极品在线观看| 欧美日韩日产免费网站看| 秋霞鲁丝午夜无码一区二区三| 岛国精品视频在线观看| 天天看天天在线精品| 羞答答AV中文字| 大香樵伊人网| 曰韩精品视频一区二区| 久久久不卡| 天天日天天舔东京热| 亚洲欧美日韩精品久| 欧综合网| 中出在线视频| 国产精品高潮久久AV| 亚洲制服欧美另类内射| 午夜男女爽爽大片免费观看| 精品丰满熟妇人妻一区| 久久欧洲| 天天淫人人妻日日色| 久久久久久国产无码精品| v91av| 夫妻AV网站| 伊人网在线观看| 丁香色色网| 国产三级多多影院2022国产AA一级毛片无码 | 久热这里| 久热影视| 啊啊啊慢点| 亚洲欧美天| 天天综合91在线| 亚洲色婷婷综合久久久久中文| 久久超碰爱| www.人人cao| 成人免费看吃奶视频网站| 久久粉色| 超碰 国产熟女精品一区| 丝袜熟女2P| 免费综合亚洲中文| 99久久久er直播网址| 91国产操逼视频| 伊人麻豆传媒| 日本三级精品| 性色综合网| 国产又长又大又粗的视频| 91殴美大片| 日韩97视频!在线| 色91综合网| 99精品丰满人妻无| 超碰69| 日韩三级在线观看mp4| 日本91白丝| 婷婷中文字幕| 东北女人av| 激情四射婷婷四五月天| 夜色五月天| 丁香六月激情综合| 亚洲人人操| 免费看一级a性色生活片久久无| 91操人| 国产三级电影免费观看| 韩国黄色片精品久久久 | 国产91久久九九免费精品无码| 欧美一区二区三区入口| 欧美日韩香蕉| 九九99精品| 九九99久久| 亚州国产精品乱| 欧美性天天影视| 91大胆欧美| 99久久无色码| 久久久九九九九| 热久久无毒不卡| 日韩本不卡视频在线观看| 99精品九九九九九九| 天天欧美| 亚洲欧洲综合成人av一区| 亚洲色 国产 欧美 日韩| 亚洲午夜福利在线影院| 色婷婷九月| 中文字幕在线观看第二页| 特级大荫道BBwBBwBBW| 日韩国产十八禁| 91男同| 91中文字幕制服丝袜免费视频| 国产传媒一区二区三区| 人妻干天天| 亚洲码专区| 最新欧洲欧美日本激情网站| 久久色一区二区| 久久久久九九九九九| 97视频播放| 思思视频免费看网站| 国产精品久久久久久久黄无码| 爱我干综合| 91丝袜美女| 97在线资源| 国产乱子伦一区二区三区在线观看| 亚洲中字幕日本一区二区三区| 国产毛片久久久久久久| 丝袜美腿欧美| 91在线观看,天天综合| 熟女激情综合网| 亚洲av乱伦色图网站| 18一区二区三区| 91处女在线视频| 九九热九九| 久久亚洲AV无码专区国产精品| 婷婷在线视频| 精国久久一区二区三区98| 亚洲情欲| 午夜免费视频1000| 国产熟女自拍| 天天做日日做| 九九九久千久久激情蜜桃在线看 | 亚洲激情综合另类男同| 久久综合中文国产| 成人五月天丁香激情综合| 国产精品熟女丝袜一区二区| 久9久9精品| 国产无吗在线播放| 九九久久九九久久| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 91精品国| 五月婷在线| 亚洲性图91| 亚洲国产av中文字幕久久| 天天影视综合网欧美精品| 人妻喷水| 911粉嫩人妻| 亚洲欧美在线综合| 欧美色性爱| 91处女视频在线观看| 激情色图| 五月天色图| 97久久网| 欧美少妇大量自拍视频在线观看| 亚洲欧洲激情卡通另类文学四射小说网站 | 97色碰| 后入日本1234| 久久婷婷视频| 97狠狠| 91在线美女| 校园春色综合网| 人妻啊啊人妻啊| 亚洲久9| 禁片 高清 在线观看视频网站| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 好舒服视频| 亚洲精品国产无码高清| 传媒免费一区二区三区| 女同性恋久久| 后入人妻无码| 超碰亚洲97| 毛片一区二区| 黄资源| 国产精品极品美女视频| 99热国产| 91人妻爽爽人人做人人澡| 99无码| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 99久在线精品99re8蜜桃| 欧美激情五月天| 日本一区不卡| 丁香婷婷激情五月天无毒不卡| 精品午夜福利国产一区二区在线观看 | 亚洲影视第一页| 欧美性生活综合| 精品黄色电影| 丝袜色综合| 日本黄 R色 成 人网站| 亚洲日韩人妻中文字幕一区| 亚洲九九视频在线观看| 天天影视综合网欧美精品| 青青青国产手线观看视频2| 熟妇高潮精品一区二区三区下载| 亚卅熟女乱色| 人人么人人操| 91制服丝袜| 色婷婷综合久久中文字幕雪峰| 最新三级网址| 国产无码精品无码| 国语精品对白| 日日黄色三级网站| 吻戏激情性巴克| 国产无码精品高清| 亚洲最大无码中文字幕网站| 日韩视频中文字幕| 四虎884| 久久97资源 网| 久热久| 三级三级三级a级全黄三| 九久精品| 国产三级中文字幕粉嫩| 蜜臀久久在线视频| 丰满人妻一区二区三区四| 91人妻素女| 黄片免费日韩| 亚洲天堂2020| 成人情色综合网| 男人的天堂色偷偷青青草视频婷婷网| 另类在线| 91啪啪视频| av午夜影院在线播放| www国产无码| 大鸡巴久久| 精品大全99999| 啊啊啊啊操死我了| 嫩草伊人久久精品| 97国产天堂岛| 久久爱超碰网| 99国产精品免费| 91在线美女| 天天操狠狠日夜夜干超碰撸com视频在线观看| 亚洲欧美在线观看无码| 久久伊人最新网址视频| 欧美片第一页| 思思久热在线精品66| 91性网| 夜夜春夜夜操| 精品人妻一区二区蜜桃视频| 超碰到97情色| 亚州欧美综合| 久草这里只有精品| 欧美人妻少妇| 超碰免费人妻人人| 亚洲欧美日韩免费电影| 色天使亚洲综合在线观看| 无码一区二区精品视频久久久春药 | 欧美亚洲国产91在线| 国产呦精品系列在线观看| 九九九九精| 婷婷久月| 成人性爱免费播放| 性久久久| 国产一级做a爰大片免费久久| 日韩国产乱子伦App| 综合久久六月久久婷婷| 日韩一级片在线看| 女优视频第10页| 国产最新AV| 欧美狠狠操| 91美女看B| 大屁股熟女一区二区三区| 另类欧美| 91丝袜| 国产强奸乱伦无码视频| 青青伊人这里只有精品| 肉丝无码中文高清| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 大干人妻| 五月婷亚洲精品天堂| 亚洲无码精品AV久久久| 日韩色欲久久一二三四区| 国产区性爱在线视频秋霞豆| 调教熟妇 久久久久久| 精品一区96| 亚洲日韩东京热一区| 妇女乱色二区| 中文乱码字字幕在线第5页| www.yeyecao| 欧美性爱伊人| 欧美久久毛片基地| 国产精品动态一区二区三区四四| 亚洲在线91| 狠狠操官网| 色色色五月婷婷| 91女神在线视频| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 亚洲91网站| 欧美综合色,www| 豆花视频操逼网址 | 久久中文字幕女同性恋一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 久久HD| 人妻社区男人天堂| 美女诱惑一区| 熟女乱伦二区| 日日干夜夜骑| 91深夜夜| 泰国AV在线观看| 2020中文字幕在线| 操逼视频色| 精品久久久久久亚洲| 少妇色综合| 中文字幕久久婷婷丁香五月天| 午夜福利视频在线一区| 美女主播色欲91抠b在线播放| 中文字幕乱妇免费视频| 天美麻花大全视频| 超碰视97中文| 国产精品婬乱一级毛片彝族| 96爱综合| 一级人妻性爱视频| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 操死我了啊啊啊| 国产亚洲日韩欧| 少妇一线天久久久久久| 后入人妻无码| 国产热RE99久久6国产精品首| 精品国产乱码久久久兰草影视| 天天综合97| 亚洲综合五月天婷婷丁香| 伊人在线大香蕉二。| 18禁精品网站在线看| 美日韩一卡二卡三卡免费人妻精品| 亚洲少妇视频| 婷婷丁香六月天| 日韩成人人妻网站| 日本午夜福利影院| 久久久久96| 久久久久亚洲精品| 欧美不卡在线一区二区| 78久久久| 亚洲91在线播放影院| 国内操逼视频二区| 日本免费人成视频播放120秒| 亚洲另类色图片| 黄色免费网| 日日干夜夜操视频h| 92性色国产午夜福利在线661| 91精品电影18| 久久久一区二区三区三州| 97露脸精品丝袜| 无码外流操逼视频| 人妻激情在线视频| 蜜乳av首页| 黄色成年| 国产精品情侣啪啪| 人人干黄色| 欧美夜色| 国内三级自拍小视频在线观看| 东京男人天堂| 亚洲情色1区| 国产精品一区二区亚洲人成毛片| 精品999日本| 黄在线| 91艹B视频| 国产熟女一区二区丰满| 少妇熟女1区2区3区| 久久综合久久综合人久久夜精品| 乱伦熟妇一区二区| 亚洲 欧美 综合 91| 青青草天天亲夜夜操网| 日本欧美中文字幕| 91美女視頻| 欧美国产日韩高清在线| 一区二区三区国产在线播放 | 麻豆区久久久久亚| 伊人久久88国产女| 日韩欧美午夜一区二区| 激情四射婷婷六月天| 狠狠色婷婷| av爱爱爱| 精品免费囯产一区二区三区| 中文字幕精品人妻丝袜| av一区二区三区 中文| 伊人国产成人av网站| 一区二区三区色综合| 亚洲老熟妇xxx| 高清无码一区二区三区| 欧美日韩色| 欧美国产有色电影| 嗯啊不要啊在线| 国产性久久久| 999久久久免费精品国产牛牛| 日本不卡一区二区三区| 小草精彩毛片| 日本熟女中文| 欧美亚洲尤物久久| 精品人妻免费观看| 国内一级精品| 无码九九| 亚洲日韩少妇一道本视频| 蜜臀久久99精品久久久久久久久| 岛园激情| 久久三| 成人AV超碰免费在线| 亚洲成人ab| 美女91av| 91路www| 黑丝91视频| 免费观看的av| 激情视频网址| 日韩成人性爱电影在线播放| 国产绿奴视频在线观看| 呦呦影院| 天天日天天操天天射河南省| 熟妇熟女一区二区三区| 欧美丝袜亚洲| 91在线超高颜值国产| 亚洲综合欧美| 欧美色性情| 91无码人妻精品一区二区三区蜜桃| 婷婷香网站| 国产精品网站免费| 日日夜夜草草草| 亚洲天堂第一页| 澳门成人网站久国产日韩| 日日狠狠久久偷偷色综合免费| 亚洲国产欧美中日韩成人综合视频| 国产高清精品一区二区三区毛片| 在线毛片片免费观看| 又大又大又大又粗爽高潮观看| 91女日逼| 国产精品香蕉| 男女啪啪网站免费视频| 偷拍 欧美 日韩| 84YTCOM性无码| 搡老女人911熟妇老熟女| 国产毛片毛片4p懂色| av影片在线观看不卡| 日韩欧美性爱电影在线观看| PMv在线观看| 伊人操你| 操逼视频亚洲| 精品少妇一区二区三区在线视频| 色色操| 天天综合网~69| 天天肏美女| 五月天色电影| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 亚洲熟女乱综合一区二区三区 | 嫩草影院性色| 亚洲激情av| 成人在线视频二区| 日韩三级在线观看mp4| 最新av在线| 少好三P| 丰满人妻-区二区三区免费看 | 99久久久久| 97人肏| 天天天天天天天天综合| 亚洲 欧美 综合 91| 婷婷性网| 91黄站| 特级特黄一级毛片免费| 超碰九色| 亚洲日韩青青草色月| 亚洲国产蜜臀系列在线观看| 91天堂丝袜美腿| 玖玖玖玖精品国产剧情| 日本不卡高清视频| 91在线无码精品秘 软件| 97爱免费插| 欧美日韩人妻婷婷一区| 91少妇人妻| 国产精品原创巨作?v网站| 欧美成人一区二区三区在线播放 | 国产亚热在线久久| 亚洲自拍偷拍视频在线| 日韩精品永久在线观看| 欧美图片色综合| 久久99久久99精品天美传媒棢·纸:.| 精品久久久av无码免费| 狠狠操综合| 白 大 人妻 区 在线| 欧美亚洲首页| 欧美性爱十八禁| 口爆综合网| 好吊色一区| 国产日本顶级一区二区三区| 国产成人无码啪| 久久久亚洲精品电影免费看| 国产夫妻性生活视频| 人妻一区二区三区视频 | 美女诱惑在线一区| 精品午夜福利导航| 性爱综合网| 久久久草草精品| 日韩欧美大力操| 18一区二区三区| 中国国产精品一区视频| 日韩欧美成人大香蕉| 日本媚薬中文字幕在线| 国产色呦呦| 欧美一区二区三区黄色影视| 欧美性爱日韩高清| 91原创在线观看| 久久久555| 日欧操屄视频| 5252色欧美在线男人的天堂| 人妻精品一区二区在线| 久日综合网| 国产高清26uuu| 后入式在线免费观看60秒| 中日韩免费看男女操逼大全| 91久精品| 天天草天天日| 久极品在线观看| 亚洲中文字幕在现观看| 强奸少妇AV导航网| 日韩成人无码| 96精品久久久久中文字幕| 在线免费观看高清无码视频| 日本熟妇熟色97一本在线观看| 久久人| 欧美综合自拍成人自拍第二十页| 欧美AB在线| 大稥蕉免费视频这里只有精品| 9118禁| 精品99999久久久久久| 翔田千里A片一区二区| 青青草在线视频人人想人人上| 高清有码一区二区| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 国产精品久久久久久9999| 日韩精品一区二区日韩| 嫩草 我啊~嗯~在线| 国产小u女在线观看| 黄色成年| 厕所偷拍在线| αⅴ天堂| 竹菊一区二区三区AV线| 久久久久成人蜜桃精品| 欧美色www亚洲国产阿娇要播| 欧美在线啊啊啊| 一区二区三区免费岛国片| 成人开心网在线视频| 久久久无码国精品无码三区三区| 欧美中出| 330dv亚洲成年视频网| 亚洲天堂无码| 欧美色图亚洲激情| 亚洲自拍欧美国产首页网曝| 国产家庭乱伦网址| 欧美碰碰综合色| 75大香蕉| 99碰碰| 精品亚洲成人免费在线| 中文字幕诱惑制服人妻丝袜美丝袜美 | 欧美精品成人在线播放| 欧美自拍网| 熟女自慰久久久| 日本国产欧美高清在线| 乱欲视频| 国内成人圈中文字幕无码视频| 五月丁香六月婷| av在线播放国产一区| 久久99干一本高清| 神马久久久久久久久久| 97自拍视频在线| 久久精品国产亚洲AV高清演员表| 大茄子熟女AV导航| 97日视频| 麻豆2区1区天美| 国产92麻豆天美精品色欲5| 麻豆美女丝袜人妻中文| 国产丝袜高跟美女av免费观看| 天堂av2019| 无码 有码 国产18p| 日本熟女不卡视频| 欧美偷拍| 熟妇高潮二区三区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 1204av韩国| 亚洲欧美大香蕉| 手机在线人成免费视频| 日本黄大片在线观看视频| 亚洲成a人在线观看久| 曰韩中文人妻视频| 蜜桃网熟妇| 日本999精品| 日韩国产品视频中文字| 婷婷综合久久| 久久久精品成人国产| 变态乱伦伪娘灌肠一区二区| 中文一区二区三区影院| 91宗合网| 亚洲激情在线| 密臀在线视频| 高清无码学生妹高潮| 国产精品九九| 激情文学 亚洲图片| 久久久中文版| 久久综合女优| 欧美午夜色妇色鬼| 麻豆久久久久久久久丝袜| 人夜夜精品网站香蕉嫩草| 五月天色五月| 夜夜爽爽爽| 口爆综合网| 人人妻人人操人人乐| 插入综合网| 黄页大片在线观看| 久久久久久性爱片| 人妻密肉在线观看| 综合日韩激情另类图片| 日本丝袜美腿人妻九九| 青青草黑寡妇男人天堂| 青青操在线亚洲视频观看欧美在线 | 91欧美巨乳| 美国三级日本三级久久99| 亚洲色图 综合| 国产精品一级二级在线| 日本精品一区二区三| 中文字幕日韩情色| 一本色道久久综合精品婷婷| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 婷色五月| 97 亚洲 日韩 欧美 在线| 中文字幕一二三区| 粉嫩AV一区夜夜嗨| 九九av| 人妻夜爽夜夜爽| 69一区二区三区| 无码人妻一区二区三区色欲aⅴ| 亚洲h片在线免费观看| 欧美性爱三区二区| 久久丁香| 97香蕉人人乳| 曰本道人妻久久久在线不卡色视频| 久久久天堂| 人妻少妇久久中文字幕一区二区 麻豆 | 国产精品第一区第一页| 亚洲欧美综合区自拍另类| 伦理片秋霞免费影院| 亚洲精品一区中文字幕乱码| 嗯啊不要啊啊在线观看视频| 欧洲自拍色图gif在线| 亚洲天堂另类| 国产精品盗摄 偷窥盗摄| 成人性爱全视频观看| 色噜噜狠狠色综无码久久合欧美| 第四色亚洲色图| 国产熟女高潮一区二区三区| 亚洲情欲| 91成人在线免费视频| 2011国产精品| 激情情色五月天| 精品人妻一区二区三区日产乱码| 国产欧美精选自拍一区| 91久久久久免| 色妇91| 91操熟女| 粉嫩在线一区二区懂色| 国内黄色精品| 国产激情在线| 色嗨嗨在线| av大香蕉网站| 天堂性色| 日本性爱少妇| 久久色一区二区| 男人的午夜天堂| 亚洲砖码砖专无区2023| 97精品视频免费| 91观看 国产白丝| 色老汉色| 97碰碰色| 国内自拍 日韩激情 99| 91在线丝袜视频| 在线97视频| 久久激情综合| 精品视频久久区| 日韩操p| 日韩女优中文字幕| 水滴偷拍| 亚洲综合九九| 啊嗯嗯啊好大好爽| 色欲av一区二区三区蜜芽| 翘臀vidoes| 91热| 亚洲天堂99| 91在线丝袜| 午夜无码精品免费看性色| 人妻 欧美 中文| 欧美片第一页| 国产天天骚| 另类天堂| 九色 人妻 大香蕉| 中文字幕一区二区三区50路| 激情丁香五月婷婷| 高精欧美色| 99九九精品| 久久97视频| 色色五月丁香| 亚洲色图A| 亚洲婷婷五月天| 天天肏夜夜肏| 噜噜在线| 欧美97在线欧| 偷拍欧美激情| 高清国产无码av| 啊啊啊好舒服好爽啊啊啊视频| 午夜男女爽爽大片免费观看| 超碰97资源中文字幕| 欧美一级AAAAAAA| 国产久久日韩网站导航| 人妻一二三区| 男人精品天堂一区| 亚欧高清在线| 超碰诱惑| 精品久久99| 老子午夜伦不卡影院| 一区二区三区四区久久视1| av无线看| 伊人嫩草| 欧美1727免费观看视频| 亚洲欧美一区二区网址| 色色99| 国产AV无码AV| 2017天天操天天日| 麻豆天美久久91| 国产狂喷潮在线精品| 色网在线| aaa一级黄片| 9Ⅰ老熟女| 人妻熟女一区二区三区在线| 人人妻人人狠人人| 久久久人妻| 99国产精品免费| 国产一区二区视频在线播放| 2020中文字幕在线观看| 久久夜夜夜夜| 操逼逼无码| 国产剧情在线| 日韩精品电影| 密桃99999| 三级特黄60分钟播放| 超碰97极品9| 一二三啪啪专区| 日韩不卡在线一区二区| 亚洲色图A| 91高跟美女在线播放| 国产成人综合网| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚洲欲色| 日韩精品人妻中文字有码在线| 国内毛片无码一级毛片| 日本人妻伦在线中文字幕| AV天黑人| 亚洲情色在线| 成人 日韩欧美一区| av无线看| 精品九九| 草B在线| 天天日天天操VV| 丁香久久| 伊人五月天激情| 亚洲av性爱电影| 97操97干| 天天操人人操骚逼网站| 99国内精品| 婷婷丁香五月激情啪啪| 久久首页| 久久AV无码AV| 久久这里只精品| 亚洲涩涩| 亚洲日韩青青草色月| 天天插天天干| 久久久成人国产精品无码| 国产亚洲性生活视频播放| 亚州色综合| 色97欧美| 熟女久久久| 男人天堂综合| 久久超碰、| 天天影视网综合少妇| 国内精品伊人久久久久影院会| 园内精品自拍视频在线播放| 91在线精品一区二区三区| 美女啊啊啊啊啊啊| 全国男人天堂网| 色偷偷超碰亚洲| 青青草字幕AV| 久久亚洲人妻| 97色欧州| 欧美高潮在线| 国产一级久久久| 中文字幕在线观看AV| 九九视品黄色| 尻女朋友一夜| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲日韩久久精品一区| 美女诱惑在线一区| 亚洲区限制级| h色99999| 影音资源男人日韩| 免费99精品国产自在在线| 天天躁狠狠躁av| 丰满人妻一区二区中文| 国产自啪精品视频网站黑丝| 嗯~啊~快点 死我视频免费看网站| 金典av| 久久视频,这里只有精品| 国产精品不卡一区二区三区| 91精品婷婷国产综合久久竹菊| 欧美 日韩 婷婷 五月| 国产精品视频在线播放| 走光一区92下载| 国产后入清纯| 好湿好紧视频| 亚洲一区二区三区婷婷| av网站在线看| 日韩免费在线视频观看| 乱欲一区二区| 午夜男人一级A片7777| 五月天激情国产综合婷婷婷| 国产人妻精品久久久一区二区三区 | 男人天堂综合| 亚洲AV人人澡人人爱| 九九九九九九综合| 91精品老女人| 夜夜操美女| 美女一区二区国产精品| 97久久超碰| 熟女啪啪视频| 99国产精品久久久在线播放| 后入式五六区| 丰满少妇一区二区三区免费看| 插入逼91| 粉嫩不卡一区二区性爱| 日本人妻A片成人免费看片| 精品久久青青草| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 黄网在线播放| 丰满少妇一区二区三区四区观看| 日韩精品人妻中文字幕久久久| 色眯眯av| 精品熟女呻吟久久91| 韩国一级婬片A片无码天美 | 九九亚洲| 99热99在线播放激情| 狠狠干综合| 欧美日本天堂| 亚洲欧美骚| 欧美黄色片在线播放| 亚洲午夜av| 97视频在| 神马麻豆福利院| 密乳AV免费观看| 嗯嗯啊啊视频在线看| 综合91网| 亚洲av青草久久一区二区| 成年女人黄网站| 超碰97欧美在线| 一区二区亚州激情久婷婷欧美| 超碰97护士| 人妻中文字幕日韩电影| 亚洲熟女国产综合另类| 亚洲不卡一| 无码区蜜乳| 九九九九久久久| 99re在线视频| www.色吧5.com| 99这里有精品| 福利大香蕉| 91精品亚洲内射孕妇| 日韩欧美视频青青| 欧美日韩美女精品久草一区二区三区| 青娱乐国产剧情av一区| 337p大胆噜噜噜噜噜91Av| 亚洲 欧美 另类 日韩 人妻一区| 九九九网站| 婷婷色影院| 97视频www| 伊人一级免费黄片| 国产999精品久久久久久| 国产精品粉嫩福利在线| 日本操色导航| 中文字幕乱碼在线| 欧美少妇人妻| av大香蕉| 五月天日日操夜夜操| 亚洲国产精品成人无码久久久| 好看的91视频| 国产偷拍网站| 久久这里都是精品| 美女网站91| www色色色com| 91痴汉| 国产麻豆一级精品视频| 土豪酒店各种姿势玩弄极品幼稚| 国产一级高跟丝袜| 国产熟妇一区二区| 久久精品国产Aⅴ| 9/A片| 97欧美视频| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 欧美久久九九| 大香蕉中文在线| 99热自拍| 亚洲图片欧美偷拍| 九九色热| 超碰色图| 熟妇熟女视频一区二区三区| 超碰九区| 神马久久久久眼| 少妇一级无码精品| SS久久| av在线免费一区二区| 久久 久久国内精品亚洲| 人人摸人人摸人人干| 很狠操| 日本日逼视频网| 猛猛干| 精品久久久av| 翔田千里Av在线| 色女免费在线观看视频网址| 黄色片大香蕉| 久久久555| 97精彩视频网站| 1769国内精品视频| 青青草久久| 啪啪啪大香蕉| 黄色无码高清黄色无码网站| www.高清无码诱惑一区.com| 国产男人又猛又粗又爽| 啊啊啊慢点| 成年男人的天堂| 日本免费中文字幕在线| 欧美综合狠| 欧美淫穴| 亚洲日本激情| 欧美熟女逼久久久久久| 久久五月婷| 熟女探花啪啪| 日日夜夜模| 五月天婷婷色| 精品国产一区二区三区在线播出| 久热大香蕉网站| 丁香六月婷婷久久综合| 国产精品白丝在线播放| 96精品一区| 国产怡红院| 午夜寂寞欧美| 国产精品日日摸夜夜添骚逼| 久啪| 欧美亚洲玖玖玖| 欧美一级特黄淫片在线观看| 欧美色图片色哟哟| 亚洲一二三四区机械| 国产视频一区二区免费| 日韩福利电影网| 亚洲偷91色| 九九久久一区二区三区| 福利色色| 亚洲乱色熟女一区| 亚洲综合网91| 色眯眯av| 99999精品成人| 九九色婷婷| 大香焦A片| 亚洲综合在线第一页| 成人精品视频| 九九九九九九成人| 五月丁香| 巨爆乳一区二区爆乳区| 久久少妇| 青青草好吊| a人欧美综合天堂麻豆| 亚洲综合色婷婷| 天天操天天射天天日| 91日韩| 亚洲做性| 久久视频少妇美女| 三级片大波波| 欧美国产日韩清纯唯美| 熟女色综合久久| 国产探花日韩援交| 蜜臀在线视频| 久久精品无码一区二区三区| 国产精品国产| 国产精品视频| 抽查国产福利主播| 裸体美女国产免费久久久网站| 亚洲AV无码国产精品久久久久| av一区二区三区四区| 国产在线视频午夜精华在| 四虎影视欧美| 国产精品午夜福利| 性九九九九九九| 综合欧美日韩在线| 美女大乳久久久久久久女人18| 男人亚洲91首页在线| 成人精品在线| 日韩黄色成人性爱| 久久香蕉国产线看观看猫咪av| juliaann精品熟女一区| 97人人干| 色五月婷婷在线| 99久久99久久综合| 色婷婷综合网站| 久9视频| 久久婷婷六月综合| 一级A啪啪啪啪| 成人在线视频网| 久久草大香蕉| 色综合久久久久| 这里只有精品久久| www.色婷婷.com| 一本久道久久综合狠狠爱| 99精品网| 国色天香av| 欧美制服网站美腿丝袜| 亚洲 图片 综合91| 99999久久久久9国产精品| 区一在线观看| 欧美激情一区二区| 99只有精品| 中文无线日韩一区| 九九九偷拍| 欧美色图亚洲色| 丁香婷婷五月| 精品人妻1区| 国产色呦呦|