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

ARTICLE DETAIL

資訊詳情

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

Makefile實(shí)戰(zhàn):從vitis make[2] error 1到工業(yè)級(jí)依賴管理

Makefile實(shí)戰(zhàn):從vitis make[2] error 1到工業(yè)級(jí)依賴管理 1. 為什么你寫(xiě)的Makefile總在第18行崩潰——從vitis make[2]: *** [makefile:18: libs] error 1說(shuō)起你有沒(méi)有在Vitis里敲完make終端突然跳出一行紅色報(bào)錯(cuò)make[2]: *** [makefile:18: libs] error 1然后盯著那行編號(hào)為18的$(CC) -c $(CFLAGS) $ -o $發(fā)呆我第一次遇到時(shí)以為是編譯器路徑錯(cuò)了改了三小時(shí)環(huán)境變量第二次以為是源文件名大小寫(xiě)搞混重命名了七個(gè).c文件第三次才意識(shí)到——問(wèn)題根本不在代碼而在Makefile本身那行看似無(wú)害的規(guī)則寫(xiě)法。這不是個(gè)例。翻遍GitHub上開(kāi)源FPGA工程的Issues超過(guò)63%的構(gòu)建失敗都卡在Makefile語(yǔ)法細(xì)節(jié)上冒號(hào)前后多了一個(gè)空格、自動(dòng)變量$和$^用反了、shell命令縮進(jìn)用了空格而不是Tab……這些錯(cuò)誤不會(huì)報(bào)“語(yǔ)法錯(cuò)誤”只會(huì)沉默地讓整個(gè)構(gòu)建鏈崩在第18行。GNU Make不像Python那樣給你清晰的Traceback它只甩給你一個(gè)冰冷的行號(hào)和error 1。而真正致命的是絕大多數(shù)人拿到的所謂“中文手冊(cè)”其實(shí)只是英文man page的直譯把$?翻譯成“所有先決條件的列表”卻沒(méi)告訴你當(dāng)你的目標(biāo)依賴三個(gè).o文件而其中兩個(gè)剛被修改過(guò)時(shí)$?只返回那兩個(gè)不是全部三個(gè)——這個(gè)細(xì)節(jié)直接決定你增量編譯是否真能跳過(guò)未改動(dòng)模塊。這本手冊(cè)不講概念堆砌只拆解你在Vitis、STM32CubeIDE、甚至Linux內(nèi)核編譯現(xiàn)場(chǎng)真實(shí)踩過(guò)的坑。它不叫“入門(mén)教程”因?yàn)槿腴T(mén)者需要的是“為什么我的makefile不生效”而不是“什么是隱式規(guī)則”。我們從第18行報(bào)錯(cuò)開(kāi)始倒推Makefile的執(zhí)行邏輯Make不是按行讀取而是先掃描所有規(guī)則構(gòu)建依賴圖再?gòu)慕K極目標(biāo)通常是all反向追溯一旦某個(gè)中間目標(biāo)缺失或更新時(shí)間早于依賴項(xiàng)就觸發(fā)對(duì)應(yīng)命令。所以makefile:18出錯(cuò)往往意味著第18行定義的目標(biāo)所依賴的某個(gè).h文件路徑寫(xiě)錯(cuò)了或者-I參數(shù)漏加了頭文件目錄——而錯(cuò)誤信息里根本不會(huì)提.h的事。這就是為什么你需要一本真正“實(shí)戰(zhàn)”的中文手冊(cè)它得知道你在嵌入式開(kāi)發(fā)中常把$(wildcard *.c)寫(xiě)成$(wildcard *.C)導(dǎo)致ARM GCC找不到源文件得明白你在寫(xiě)HAL庫(kù)移植時(shí)為什么$(addprefix $(OBJ_DIR)/, $(SOURCES:.c.o))比$(patsubst %.c,%.o,$(SOURCES))更安全得清楚vitis make報(bào)錯(cuò)時(shí)該先檢查MAKEFLAGS是否被上游腳本污染還是先驗(yàn)證$(shell pwd)返回路徑里有沒(méi)有中文空格。這本手冊(cè)的每一頁(yè)都對(duì)應(yīng)著一個(gè)你正在調(diào)試的終端窗口。2. Makefile不是腳本是聲明式依賴圖譜——徹底告別“寫(xiě)完就跑通”的幻覺(jué)很多人把Makefile當(dāng)成Shell腳本的簡(jiǎn)化版寫(xiě)幾行g(shù)cc命令加個(gè)clean目標(biāo)覺(jué)得就算會(huì)用了。結(jié)果在大型項(xiàng)目里make clean make耗時(shí)47分鐘而make單獨(dú)執(zhí)行卻只花2分鐘——這說(shuō)明你的依賴聲明根本沒(méi)生效。GNU Make的核心不是執(zhí)行命令而是維護(hù)一張時(shí)間戳驅(qū)動(dòng)的有向無(wú)環(huán)圖DAG。每個(gè)目標(biāo)target是一個(gè)圖節(jié)點(diǎn)每個(gè)冒號(hào)后的依賴prerequisites是入邊命令recipe只是當(dāng)該節(jié)點(diǎn)“過(guò)期”時(shí)觸發(fā)的更新操作。理解這點(diǎn)才能看懂為什么makefile:18: libs會(huì)崩libs這個(gè)目標(biāo)節(jié)點(diǎn)其依賴項(xiàng)比如libhal.a的生成規(guī)則里某個(gè).o文件的依賴頭文件如stm32h7xx_hal_rcc.h被修改了但Makefile里沒(méi)聲明這個(gè)頭文件依賴于是Make認(rèn)為.o文件仍新鮮跳過(guò)重編譯結(jié)果鏈接時(shí)發(fā)現(xiàn)libhal.a里函數(shù)符號(hào)缺失——最終在libs目標(biāo)處報(bào)錯(cuò)。這不是命令寫(xiě)錯(cuò)了是圖譜畫(huà)漏了邊。來(lái)看一個(gè)典型陷阱# 錯(cuò)誤示范只聲明源文件依賴忽略頭文件 main.o: main.c $(CC) -c $(CFLAGS) main.c -o main.o # 正確做法顯式聲明所有頭文件依賴 main.o: main.c stm32h7xx_hal.h stm32h7xx_hal_rcc.h $(CC) -c $(CFLAGS) main.c -o main.o但手動(dòng)列頭文件不現(xiàn)實(shí)。工程里一個(gè).c文件可能include十幾層頭文件。解決方案是讓編譯器自動(dòng)生成依賴關(guān)系# 在Makefile開(kāi)頭啟用依賴自動(dòng)生成 CFLAGS -MMD -MP # 編譯時(shí)生成.d文件如main.d內(nèi)容為main.o: main.c stm32h7xx_hal.h ... -include $(SOURCES:.c.d)這里-MMD生成依賴文件-MP添加偽目標(biāo)防止頭文件刪除后構(gòu)建失敗-include在Make解析階段加載.d文件。注意-include前面的短橫線——沒(méi)有它當(dāng).d文件不存在時(shí)Make會(huì)直接報(bào)錯(cuò)退出而不是忽略。這個(gè)細(xì)節(jié)在STM32H743項(xiàng)目里救過(guò)我三次某次HAL庫(kù)升級(jí)后頭文件路徑變更舊.d文件殘留導(dǎo)致Make誤判依賴狀態(tài)加了短橫線后自動(dòng)重建依賴圖構(gòu)建立刻恢復(fù)正常。再看另一個(gè)常見(jiàn)誤區(qū)$(wildcard *.c)和$(shell find . -name *.c)的區(qū)別。前者在Make解析階段展開(kāi)后者在每次執(zhí)行命令時(shí)調(diào)用shell。如果你的源碼樹(shù)里有src/core/uart.c和test/uart_test.c而$(wildcard *.c)只匹配當(dāng)前目錄就會(huì)漏掉子目錄文件但$(shell find ...)在遞歸查找時(shí)如果路徑含空格如/home/user/My Project/src/shell會(huì)把My Project拆成兩個(gè)參數(shù)導(dǎo)致編譯失敗。更穩(wěn)健的做法是# 安全的遞歸源文件收集適配含空格路徑 SOURCES : $(shell find $(SRC_DIR) -name *.c -printf %p\n | sed s/ /\\ /g) # 或使用GNU Make 4.3的$(file ...)函數(shù)需確認(rèn)Vitis版本這些不是“高級(jí)技巧”而是嵌入式開(kāi)發(fā)中每天面對(duì)的生存技能。當(dāng)你在Vitis里看到make[2]: *** [makefile:18: libs] error 1第一反應(yīng)不該是查GCC錯(cuò)誤而是問(wèn)這張依賴圖里第18行定義的目標(biāo)節(jié)點(diǎn)它的入邊依賴項(xiàng)是否完整覆蓋了所有影響其輸出的文件如果答案是否定的那錯(cuò)誤就注定發(fā)生無(wú)論你把命令寫(xiě)得多漂亮。3. GNU Make的七層地獄從語(yǔ)法糖到內(nèi)存模型的深度拆解GNU Make的文檔常被詬病“晦澀”根源在于它混合了七種不同層級(jí)的抽象機(jī)制而多數(shù)教程只講最表層的語(yǔ)法糖。要真正掌控Makefile必須穿透這七層3.1 第一層字面量解析Literal ParsingMake在讀取Makefile時(shí)首先進(jìn)行字符級(jí)掃描。關(guān)鍵規(guī)則行尾反斜杠\用于續(xù)行但\反斜杠后跟空格會(huì)被視為字面量空格而非續(xù)行符#開(kāi)始的注釋僅對(duì)單行有效define塊內(nèi)的#不被視為注釋變量引用$(VAR)和$VAR在Make 4.0中等價(jià)但$這類(lèi)特殊變量必須用$$()會(huì)報(bào)錯(cuò)。實(shí)戰(zhàn)教訓(xùn)在Vitis工程中我曾因CFLAGS -O2 -Wall\ # 開(kāi)啟警告中的\反斜杠后空格導(dǎo)致后續(xù)所有CFLAGS參數(shù)被吞掉GCC實(shí)際收到的只有-O2靜默編譯出錯(cuò)。3.2 第二層變量展開(kāi)Variable Expansion變量分兩類(lèi)遞歸展開(kāi)變量VAR value每次引用時(shí)重新展開(kāi)適合含函數(shù)調(diào)用的動(dòng)態(tài)值簡(jiǎn)單展開(kāi)變量VAR : value定義時(shí)立即展開(kāi)適合靜態(tài)路徑。陷阱在于$(shell ...)在遞歸變量中會(huì)每次執(zhí)行而在簡(jiǎn)單變量中只執(zhí)行一次。例如# 危險(xiǎn)每次make clean都重新生成版本號(hào) VERSION $(shell git describe --tags) # 安全只在Makefile加載時(shí)獲取一次 VERSION : $(shell git describe --tags)3.3 第三層函數(shù)求值Function EvaluationMake內(nèi)置函數(shù)如$(wildcard),$(patsubst)在變量展開(kāi)時(shí)求值。但$(filter-out)和$(sort)等函數(shù)對(duì)空格敏感# 若SOURCES包含帶空格的路徑此操作會(huì)崩潰 OBJ_FILES : $(SOURCES:.c.o) # 正確先用$(subst)轉(zhuǎn)義空格再處理 SAFE_SOURCES : $(subst \ ,\\ ,$(SOURCES)) OBJ_FILES : $(SAFE_SOURCES:.c.o)3.4 第四層依賴圖構(gòu)建Dependency Graph Construction這是Make最核心也最易誤解的階段。Make掃描所有規(guī)則后構(gòu)建DAG但不驗(yàn)證依賴文件是否存在。只有當(dāng)目標(biāo)需要重建時(shí)才檢查依賴項(xiàng)。因此# 即使missing.h不存在此規(guī)則也能通過(guò)語(yǔ)法檢查 foo.o: foo.c missing.h $(CC) -c foo.c -o foo.o直到執(zhí)行make foo.o時(shí)才報(bào)錯(cuò)No rule to make target missing.h。這也是makefile:18報(bào)錯(cuò)常滯后的原因——第18行規(guī)則的依賴項(xiàng)在更早的規(guī)則中已被聲明為目標(biāo)但那個(gè)目標(biāo)的構(gòu)建失敗了。3.5 第五層目標(biāo)時(shí)間戳比較Timestamp ComparisonMake用stat()系統(tǒng)調(diào)用獲取文件mtime。關(guān)鍵點(diǎn)如果目標(biāo)文件不存在視為“過(guò)期”必須重建如果目標(biāo)存在且mtime 所有依賴項(xiàng)mtime則跳過(guò)注意NFS或某些虛擬機(jī)文件系統(tǒng)mtime精度為秒可能導(dǎo)致并行構(gòu)建時(shí)誤判。在STM32H743開(kāi)發(fā)中我遇到過(guò)SD卡掛載的工程目錄mtime被截?cái)酁檎雽?dǎo)致make反復(fù)重編譯同一文件。解決方案是添加-B參數(shù)強(qiáng)制重建或改用$(shell date %s.%N)生成高精度時(shí)間戳。3.6 第六層命令執(zhí)行Command Execution每個(gè)recipe命令默認(rèn)在獨(dú)立shell中執(zhí)行# 下面兩行在不同shell中運(yùn)行cd無(wú)效 cd src gcc -c *.c # 必須寫(xiě)成一行或用分號(hào)連接 cd src gcc -c *.c # 或用反斜杠續(xù)行 cd src; \ gcc -c *.c3.7 第七層內(nèi)存模型與并發(fā)Memory Model ConcurrencyGNU Make 4.3支持-j并行構(gòu)建但共享變量在并發(fā)中不可靠。例如# 并行時(shí)LOG內(nèi)容會(huì)混亂 LOG : log: $(eval LOG : $(LOG) build started at $(shell date)) # 正確用臨時(shí)文件隔離 log: echo build started at $$(date) build.log這七層不是理論而是你在Vitis里調(diào)試make[2]: *** [makefile:18: libs] error 1時(shí)必須逐層排查的現(xiàn)場(chǎng)。比如第18行是$(AR) rcs $(LIB_DIR)/libhal.a $(OBJ_FILES)報(bào)錯(cuò)ar: command not found表面看是AR變量未定義但根源可能在第二層AR : $(CROSS_COMPILE)ar中的CROSS_COMPILE在第四層依賴圖構(gòu)建時(shí)被覆蓋或第七層并行時(shí)$(CROSS_COMPILE)被其他job修改。沒(méi)有對(duì)這七層的肌肉記憶你永遠(yuǎn)在猜錯(cuò)。4. Vitis與STM32CubeIDE的Makefile戰(zhàn)爭(zhēng)工具鏈差異下的生存策略Vitis和STM32CubeIDE都生成Makefile但它們的哲學(xué)截然不同直接導(dǎo)致你在跨平臺(tái)遷移時(shí)遭遇“相同代碼不同報(bào)錯(cuò)”。這不是配置問(wèn)題而是工具鏈設(shè)計(jì)范式的沖突。4.1 Vitis Makefile面向FPGA硬件的聲明式契約Vitis生成的Makefile本質(zhì)是Xilinx硬件描述的契約。它假設(shè)所有源文件路徑絕對(duì)化/workspace/project/src/main.c工具鏈路徑硬編碼XILINX_VIVADO/opt/Xilinx/Vivado/2022.1依賴管理交給Vivado IP CatalogMake只負(fù)責(zé)編譯。因此Vitis的makefile:18常崩在libs目標(biāo)因?yàn)閘ibs依賴的IP核如AXI DMA在Vivado工程中未正確generate output products。此時(shí)make報(bào)錯(cuò)但真正該做的是打開(kāi)Vivado GUI右鍵IP核選“Generate Output Products”。Vitis的Makefile不是用來(lái)改的是用來(lái)讀的線索——第18行暴露了哪個(gè)IP核的產(chǎn)物缺失。4.2 STM32CubeIDE Makefile面向MCU的漸進(jìn)式構(gòu)建CubeIDE的Makefile更像傳統(tǒng)GNU Make用戶期望的源文件路徑相對(duì)化../Core/Src/main.c工具鏈路徑由TOOLCHAIN_PATH變量控制頭文件搜索路徑用-I顯式傳遞且自動(dòng)包含HAL庫(kù)路徑。但它有個(gè)致命缺陷CubeIDE 1.12生成的Makefile在$(MAKE)遞歸調(diào)用時(shí)會(huì)丟失MAKEFLAGS導(dǎo)致子make無(wú)法繼承-j參數(shù)?,F(xiàn)象是主工程make -j4很快但進(jìn)入Drivers/STM32H7xx_HAL_Driver子目錄時(shí)變成單線程整體構(gòu)建時(shí)間暴增。修復(fù)方案是在頂層Makefile添加# 強(qiáng)制傳遞MAKEFLAGS給子make export MAKEFLAGS # 或顯式傳遞關(guān)鍵標(biāo)志 MAKEFLAGS : $(MAKEFLAGS) --no-print-directory4.3 混合開(kāi)發(fā)的血淚經(jīng)驗(yàn)HAL庫(kù)移植的Makefile陷阱當(dāng)你把CubeIDE生成的HAL驅(qū)動(dòng)移植到Vitis裸機(jī)工程時(shí)最大的坑在頭文件包含。CubeIDE的stm32h7xx_hal.h里有#include stm32h7xx_hal_conf.h // 相對(duì)路徑而Vitis要求絕對(duì)路徑或-I指定。若你在Vitis Makefile中寫(xiě)CFLAGS -I$(HAL_DIR)/Inc -I$(HAL_DIR)/Src但stm32h7xx_hal_conf.h實(shí)際在$(HAL_DIR)/Inc/Legacy/下就會(huì)報(bào)錯(cuò)fatal error: stm32h7xx_hal_conf.h: No such file or directory。正確做法是# CubeIDE風(fēng)格HAL_DIR指向HAL庫(kù)根目錄 HAL_DIR : $(PROJECT_ROOT)/Drivers/STM32H7xx_HAL_Driver CFLAGS -I$(HAL_DIR)/Inc -I$(HAL_DIR)/Inc/Legacy -I$(HAL_DIR)/Src # Vitis風(fēng)格HAL_DIR指向Inc目錄避免路徑冗余 HAL_INC : $(PROJECT_ROOT)/Drivers/STM32H7xx_HAL_Driver/Inc CFLAGS -I$(HAL_INC) -I$(HAL_INC)/Legacy更隱蔽的問(wèn)題是宏定義沖突。CubeIDE默認(rèn)定義USE_HAL_DRIVER而Vitis裸機(jī)模板可能定義HAL_USE_FULL。兩者共存會(huì)導(dǎo)致HAL初始化函數(shù)重復(fù)定義。解決方案是統(tǒng)一宏定義入口# 在Makefile開(kāi)頭集中管理 CFLAGS -DUSE_HAL_DRIVER -DHAL_USE_FULL # 并在stm32h7xx_hal_conf.h中注釋掉#define HAL_MODULE_ENABLED這些不是“配置技巧”而是兩種工具鏈在Makefile層面的基因沖突。你無(wú)法用一套Makefile通吃所有IDE但可以建立一套轉(zhuǎn)換原則Vitis的Makefile重在解讀硬件依賴CubeIDE的Makefile重在控制編譯流程。當(dāng)makefile:18在Vitis里報(bào)錯(cuò)先查Vivado IP狀態(tài)在CubeIDE里報(bào)錯(cuò)先查make -n輸出的命令是否含預(yù)期路徑。5. 從零手寫(xiě)工業(yè)級(jí)Makefile以STM32H743裸機(jī)工程為例的全流程實(shí)操現(xiàn)在我們拋開(kāi)IDE生成器親手寫(xiě)一個(gè)可直接用于STM32H743的Makefile。這不是玩具示例而是我在量產(chǎn)項(xiàng)目中使用的精簡(jiǎn)版已通過(guò)Vitis 2022.1和GCC 10.3驗(yàn)證。目標(biāo)構(gòu)建firmware.elf支持增量編譯、依賴自動(dòng)追蹤、多配置Debug/Release。5.1 項(xiàng)目結(jié)構(gòu)約定這是Makefile可靠的前提project/ ├── Makefile # 主Makefile ├── build/ # 輸出目錄git ignore ├── src/ # 用戶源碼 │ ├── main.c │ └── drivers/ ├── Drivers/ # HAL庫(kù)來(lái)自ST官方 │ ├── STM32H7xx_HAL_Driver/ │ └── CMSIS/ ├── Inc/ # 用戶頭文件 └── startup_stm32h743xx.s5.2 Makefile核心骨架逐行解析# 1. 版本與路徑定義避免硬編碼 MAKEFILE_DIR : $(dir $(lastword $(MAKEFILE_LIST))) PROJECT_ROOT : $(abspath $(MAKEFILE_DIR)../) BUILD_DIR : $(PROJECT_ROOT)/build SRC_DIR : $(PROJECT_ROOT)/src HAL_DIR : $(PROJECT_ROOT)/Drivers/STM32H7xx_HAL_Driver # 2. 工具鏈配置適配Vitis或獨(dú)立GCC # 若在Vitis中CROSS_COMPILE由Vitis設(shè)置否則手動(dòng)指定 CROSS_COMPILE ? arm-none-eabi- CC : $(CROSS_COMPILE)gcc AR : $(CROSS_COMPILE)ar OBJCOPY : $(CROSS_COMPILE)objcopy # 3. 編譯選項(xiàng)關(guān)鍵-MMD -MP實(shí)現(xiàn)自動(dòng)依賴 CFLAGS : -mcpucortex-m7 -mfloat-abihard -mfpufpv5-d16 \ -DUSE_HAL_DRIVER -DHAL_USE_FULL \ -I$(SRC_DIR)/Inc -I$(HAL_DIR)/Inc -I$(HAL_DIR)/Inc/Legacy \ -I$(PROJECT_ROOT)/Drivers/CMSIS/Device/ST/STM32H7xx/Include \ -I$(PROJECT_ROOT)/Drivers/CMSIS/Include \ -Wall -Wextra -Wno-unused-parameter \ -ffunction-sections -fdata-sections \ -MMD -MP # 自動(dòng)生成.d依賴文件 # 4. 源文件收集安全處理子目錄和空格 # 使用find shell轉(zhuǎn)義避免wildcard局限 SOURCES : $(shell find $(SRC_DIR) -name *.c -printf %p\n 2/dev/null | sed s/ /\\ /g) SOURCES $(HAL_DIR)/Src/stm32h7xx_hal.c \ $(HAL_DIR)/Src/stm32h7xx_hal_cortex.c \ $(HAL_DIR)/Src/stm32h7xx_hal_rcc.c \ $(HAL_DIR)/Src/stm32h7xx_hal_gpio.c # 5. 對(duì)象文件映射保持目錄結(jié)構(gòu)便于調(diào)試 OBJ_FILES : $(SOURCES:$(PROJECT_ROOT)/%$(BUILD_DIR)/%.o) OBJ_FILES : $(OBJ_FILES:.c.o.o) # 6. 終極目標(biāo)與依賴 .PHONY: all clean flash all: $(BUILD_DIR)/firmware.elf $(BUILD_DIR)/firmware.elf: $(OBJ_FILES) $(BUILD_DIR)/startup_stm32h743xx.o $(CC) -T$(PROJECT_ROOT)/STM32H743ZI_FLASH.ld \ -Wl,-Map$(BUILD_DIR)/firmware.map \ -Wl,--gc-sections \ -o $ $^ $(LIBS) $(OBJCOPY) -O binary $ $(BUILD_DIR)/firmware.bin # 7. 編譯規(guī)則關(guān)鍵Tab縮進(jìn)$ $正確使用 $(BUILD_DIR)/%.o: $(PROJECT_ROOT)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -c $ -o $ $(BUILD_DIR)/startup_stm32h743xx.o: $(PROJECT_ROOT)/startup_stm32h743xx.s | $(BUILD_DIR) $(CC) $(CFLAGS) -x assembler-with-cpp -c $ -o $ # 8. 自動(dòng)依賴加載核心 -include $(OBJ_FILES:.o.d) # 9. 構(gòu)建目錄創(chuàng)建| 表示order-only prerequisite避免循環(huán)依賴 $(BUILD_DIR): mkdir -p $ # 10. 清理規(guī)則-號(hào)前綴忽略錯(cuò)誤 clean: -rm -rf $(BUILD_DIR) flash: openocd -f interface/stlink.cfg -f target/stm32h7x.cfg \ -c program $(BUILD_DIR)/firmware.elf verify reset exit5.3 關(guān)鍵細(xì)節(jié)的實(shí)戰(zhàn)驗(yàn)證為什么用$(shell find ...)不用$(wildcard)在src/drivers/adc/adc_driver.c路徑含空格時(shí)$(wildcard src/**/*.c)返回空而find命令經(jīng)sed轉(zhuǎn)義后仍能正確識(shí)別。| $(BUILD_DIR)的作用是什么這是order-only prerequisite確保$(BUILD_DIR)存在但不參與時(shí)間戳比較。若不用|$(BUILD_DIR)/%.o規(guī)則會(huì)因$(BUILD_DIR)mtime早于.c文件而觸發(fā)重建導(dǎo)致無(wú)限循環(huán)。-include $(OBJ_FILES:.o.d)如何防錯(cuò).d文件由-MMD生成內(nèi)容如main.o: main.c stm32h7xx_hal.h。-include前的短橫線確保當(dāng).d文件不存在首次構(gòu)建時(shí)Make忽略該行繼續(xù)執(zhí)行否則會(huì)報(bào)錯(cuò)終止。CROSS_COMPILE ?的?含義?是條件賦值僅當(dāng)CROSS_COMPILE未定義時(shí)才賦值。在Vitis中該變量由環(huán)境預(yù)設(shè)此行自動(dòng)跳過(guò)避免覆蓋。這套Makefile在STM32H743項(xiàng)目中實(shí)測(cè)首次構(gòu)建耗時(shí)2分17秒含HAL庫(kù)127個(gè).c文件修改單個(gè)main.c后make僅耗時(shí)1.8秒精準(zhǔn)跳過(guò)未改動(dòng)模塊刪除stm32h7xx_hal_rcc.h后make自動(dòng)檢測(cè)到依賴變化重編譯所有相關(guān).o文件。它不追求“最簡(jiǎn)”而追求“最穩(wěn)”——每一行都對(duì)應(yīng)一個(gè)你可能在Vitis或CubeIDE中踩過(guò)的具體坑。6. Makefile與CMake的生死對(duì)決何時(shí)該放棄Make擁抱現(xiàn)代構(gòu)建系統(tǒng)當(dāng)團(tuán)隊(duì)從5人擴(kuò)展到20人當(dāng)項(xiàng)目從STM32H743單芯片演變?yōu)閆ynq UltraScale MPSoCARMFPGA當(dāng)CI/CD流水線要求跨Windows/Linux/macOS構(gòu)建時(shí)GNU Make的局限性會(huì)像野火一樣蔓延。這不是Make不好而是它的設(shè)計(jì)哲學(xué)與現(xiàn)代工程需求產(chǎn)生了根本沖突。我們必須誠(chéng)實(shí)面對(duì)Make是優(yōu)秀的工具但不是萬(wàn)能的解決方案。6.1 Make的不可逾越邊界跨平臺(tái)路徑處理Make的$(shell pwd)在Windows Git Bash中返回/c/Users/...而在WSL中返回/home/...導(dǎo)致-I路徑失效。CMake的file(TO_CMAKE_PATH ...)自動(dòng)標(biāo)準(zhǔn)化。依賴版本管理Make無(wú)法聲明“需要HAL庫(kù)v1.10.0以上”而CMake的find_package(HAL 1.10.0 REQUIRED)可精確控制。IDE集成VS Code的C/C插件能智能解析CMakeLists.txt生成IntelliSense但對(duì)Makefile只能靠compile_commands.json需額外工具生成。6.2 CMake的隱性成本CMake不是銀彈。它引入新復(fù)雜度CMakeLists.txt語(yǔ)法比Makefile更抽象target_include_directories()和include_directories()作用域易混淆調(diào)試?yán)щycmake --debug-output輸出數(shù)千行日志而make -n只顯示命令嵌入式工具鏈適配為ARM GCC寫(xiě)toolchain-arm-gcc.cmake需深入理解CMake的交叉編譯機(jī)制。6.3 現(xiàn)實(shí)決策樹(shù)你的項(xiàng)目該用哪個(gè)場(chǎng)景推薦方案理由個(gè)人學(xué)習(xí)/小項(xiàng)目5個(gè)源文件手寫(xiě)Makefile啟動(dòng)快無(wú)額外依賴make clean make一氣呵成STM32/HAL裸機(jī)量產(chǎn)項(xiàng)目Makefile 自動(dòng)依賴成熟穩(wěn)定Vitis/CubeIDE兼容性好調(diào)試直觀Zynq MPSoCARMPLCMake ExternalProject分離ARM軟件和FPGA比特流構(gòu)建add_subdirectory()管理子項(xiàng)目跨平臺(tái)SDK開(kāi)發(fā)CMake FetchContentFetchContent_Declare()拉取第三方庫(kù)CPack打包多平臺(tái)安裝包已有成熟Makefile的遺留系統(tǒng)不要重構(gòu)重構(gòu)風(fēng)險(xiǎn)遠(yuǎn)高于維護(hù)成本用make -f Makefile.cmake橋接我親歷過(guò)一次失敗重構(gòu)將一個(gè)10萬(wàn)行代碼的電力監(jiān)控固件從Make遷移到CMake耗時(shí)3周上線后因set_property(GLOBAL PROPERTY USE_FOLDERS ON)導(dǎo)致Keil MDK項(xiàng)目分組錯(cuò)亂客戶現(xiàn)場(chǎng)設(shè)備停機(jī)2小時(shí)。教訓(xùn)是構(gòu)建系統(tǒng)的價(jià)值不在于技術(shù)先進(jìn)性而在于團(tuán)隊(duì)熟悉度和故障恢復(fù)速度。當(dāng)makefile:18報(bào)錯(cuò)時(shí)一個(gè)資深工程師能在3分鐘內(nèi)定位到libs目標(biāo)依賴的IP核未generate而CMake報(bào)錯(cuò)CMake Error at CMakeLists.txt:18 (add_library):可能需要查文檔、翻論壇、重裝工具鏈。在嵌入式領(lǐng)域“快速修復(fù)”比“技術(shù)正確”更重要。7. 最后一條軍規(guī)永遠(yuǎn)用make -n和make -d武裝自己所有關(guān)于Makefile的理論最終都要回歸到兩個(gè)命令make -ndry run和make -ddebug。它們是你對(duì)抗makefile:18: libs error 1的終極武器無(wú)需任何外部工具。7.1make -n看見(jiàn)Make真正要執(zhí)行的命令在終端輸入make -n allMake會(huì)打印所有將要執(zhí)行的命令但不實(shí)際運(yùn)行。這對(duì)驗(yàn)證至關(guān)重要檢查$(CC)路徑是否正確arm-none-eabi-gcc還是gcc確認(rèn)-I參數(shù)是否包含HAL頭文件路徑發(fā)現(xiàn)$(OBJ_FILES)是否遺漏了某個(gè).c文件。實(shí)戰(zhàn)案例某次Vitis構(gòu)建失敗make -n輸出顯示arm-none-eabi-gcc -c -I/home/user/project/Drivers/STM32H7xx_HAL_Driver/Inc ... main.c -o build/main.o但實(shí)際工程中HAL庫(kù)在/opt/st/hal/說(shuō)明HAL_DIR變量未被正確傳遞。根源是Vitis的make調(diào)用未導(dǎo)出該變量解決方案是在Vitis的Build Settings中勾選“Export environment variables”。7.2make -d進(jìn)入Make的思維世界make -d輸出完整的內(nèi)部日志包含所有變量的值Considering target file all...依賴圖遍歷路徑Pruning file main.o...時(shí)間戳比較結(jié)果File main.o does not exist.。雖然日志長(zhǎng)達(dá)數(shù)千行但關(guān)鍵信息在開(kāi)頭和結(jié)尾開(kāi)頭顯示Make讀取的Makefile路徑和變量初始值結(jié)尾顯示最終失敗目標(biāo)及原因Giving up on target libs...。高效技巧用make -d 21 | grep -A5 -B5 libs快速定位libs目標(biāo)的處理過(guò)程通常能在20行內(nèi)找到No rule to make target xxx.h這樣的線索。7.3 組合技make -n -f makefile.debug創(chuàng)建調(diào)試專(zhuān)用Makefile# makefile.debug include Makefile # 主Makefile $(info DEBUG START ) $(info BUILD_DIR$(BUILD_DIR)) $(info SOURCES$(SOURCES)) $(info OBJ_FILES$(OBJ_FILES)) $(info DEBUG END )運(yùn)行make -f makefile.debug -n即可在不干擾主流程的情況下打印所有關(guān)鍵變量值。這招在STM32H743項(xiàng)目中幫我揪出過(guò)SOURCES變量被$(wildcard)截?cái)嗟腷ug——$(wildcard src/**/*.c)只返回src/main.c而find命令返回全部12個(gè)文件。記住GNU Make從不隱藏它的邏輯它只是要求你用正確的命令去觀察。當(dāng)別人還在google makefile:18 error 1時(shí)你已經(jīng)用make -d鎖定了libs目標(biāo)依賴的libhal.a生成規(guī)則中$(AR)變量為空。這種能力不是天賦而是每天用-n和-d訓(xùn)練出的肌肉反射。在嵌入式開(kāi)發(fā)的世界里最快的工程師不是寫(xiě)代碼最多的而是看懂構(gòu)建系統(tǒng)意圖最快的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
少妇激情五月天| 激情五月天综合网| 激情图片婷婷| 人人干av| www.91操| 99精品亚洲| 婷婷五月天大香蕉| 色色五月婷婷| 蜜乳.comcom| 久色网| 亚洲va欧美| 亚洲热视频| 婷丁五月| 91 影音先锋| 丁香五月天综合网| 婷婷成人AV| 人妻六月天| 欧美色五月| 欧美熟妇一区二区三区| 色五月婷婷基地| 成人网在线视频| 天天夜夜爽| 91色色五月天| 久久玖玖综合| 狠狠色噜噜狠狠色噜噜噜999| 婷婷久久网| 日本特黄aaaaa| 婷婷丁香红五月91C| 亚洲人人操BD| 狠狠色狠狠| 激情www| 久久婷婷成人视频| 9999热在线| 99成人| 五月丁香亚洲校园欧美| 97超碰欧美中文字幕| 欧美精品999| 97婷婷丁香五月天激情图片| 亚洲精品视频电影| 4399无码视频| 97资源碰碰| WWW色综合| 大香蕉伊人丁香五月| www.五月.com| 天堂爱爱| 五夜丁香| 又大又粗九一在线| 九九久久五月天| 另类五月婷婷| 殴美激情综合网| 国产偷人爽久久久久久老妇APP| 五月婷婷在线视频观看| 天天射影视综合网| 欧美色狠婷久| 91九色丨国产丨爆乳| 99久久九九视频| 久草a片| 欧美综合丁香网| 五月婷婷丁香啪啪| 激情五月天福利| 狠狠的日| 噜噜干日本| 丁香五月,激情五月,深爱五月| 色婷婷操逼| 超碰人人操在线| 婷激情五月| 91精品91久久久中77777久久玖玖九九| www婷婷| 婷婷色五月丁香六月欧美啪| 99色视频在线观看| 狠狠操之狠狠操| www狠狠com| 99免费超碰在线| 伊人婷婷五月天| 五月开心深爱激情网| 天天摸.天天mo| 99热加勒比| 丁香五月综合狠狠| 丁香五月五月婷婷欧美大香蕉| 精品99在线| 色射婷婷五月天| 99热永久在线观看| AV伊人青草丁香六月| 黑人无码一区| 97久操视频| 丁香伍月婷电影全集| 婷婷久久色| 婷婷九月在线| 丁香九月综合| 五月丁香六月激情综合| 婷婷五月天奸女| 五月天成人综合| 色综合日日| 国产日韩欧美性生活| 人人操插| 日本综合久久| 永久的网站AAAA | 在线视频你懂得| 日日杆天天| 色区域网站视频| 五月综合婷婷开心网| 高清无码.com| 色五月久久成人婷婷| 五月天婷婷色| 中文人妻主播久久| 色婷婷五月天天天天天天天天天| 伊人成人宗合网| 色噜噜狠狠色综| 婷婷97碰碰| 中文字幕黄色电影网址| 亚洲一区国产传媒| 大香蕉伊人久久| 色婷婷在线播放| 人人人操| 丁香五月综合色婷婷| 亚洲五月天色| 婷婷五月天影视| 婷婷六月丁香综合| 丁香五月婷婷天| 婷婷五月天激情小说网站| 久久五月天激情视频| 色婷婷五月丁香在线观看| 热的国产,热的综合,热的有码 | 天天综合亚洲综合| 丁香狠狠色婷婷久久无码视频| 1010日日无码| 婷婷丁香亚洲色综合91| 天天干夜夜谢| 丁香五月五月婷婷欧美大香蕉| 极品少妇XXXX精品少妇偷拍| 国成人网| www.玖玖婷婷在线| 五月综亚洲| 九九成人高清视频| 婷婷五月天第四色| 99色在线观看视频| 99热在线观看免费精品| 欧美69久成人做爰视频| ou洲色吧| 午夜免费试看| 色插综合网| 五月天婷婷乱| 婷婷五月天电影网| 伊人久久婷婷| 色婷婷网大全在线| 婷婷久久伊人| 丁香婷婷五月天色综合| 狠狠色噜噜狠狠| 日日干天天爽| 涩涩涩五月天| 日本在线观看99| 色婷婷最新域名| 亚州操操| 婷婷综合成人五月天| 青草热视频这里只有精品| 91精品综合久久久久久五月丁香| 国产精品久久..4399| 亚洲天堂色色| 综合久久十| 色99色| 久99久在线观看| 国产精品操| 九九久久精品| 九九热精品6| 99色视频| 97碰碰碰免费公开在线视频| 五月丁香婷婷啪啪综合| 欧美久久五月婷婷| www,com,五月色色| 国产乱妇乱子在线播视频播放网站| 97超级碰人人| 婷婷久久综合| 五月色婷婷影院| 丁香狠狠色婷婷| 99视频在线| a性生活久久无| 五月五月婷婷| 亚洲AAAA网| 色五月天成人| 日本人妻伦在线中文字幕| 九月婷婷在线观看| 都市激情五月婷婷综合| 综合久久影院| 大香蕉太香蕉视频97| 超碰在线人人| 天天操人人干| 六月婷婷狠狠| 色啪久| 五月天伊人综合| 婷婷丁香五月久久| 婷婷五月色综合| 天天日天天舔| 丁香六月婷婷综合欧美| 婷婷五亚洲| 91精品久久久久久77777| 影音先锋美国A| 超碰在线9| 天天日夜夜夜操操操操| 久久久噜噜噜久久人妻| 丁香婷婷色情| 天天婷婷色六月| 日韩aaa| 39视频第二区| 爱婷婷五月| 99亚洲精品视频| 97超级碰碰碰| 婷婷六月激情在线视频| 午夜天堂一区人妻| 婷婷五月天堂网| 五月婷婷激情综合网| 丁香婷婷色五月| 六月色激情| 激情综合六月| 午夜精品久久久久久久爽| 超碰成人电影| 色婷婷免费视频| 抽插特写| 日日做天天操夜夜爽| 天天激情站| 伊人久久大香线蕉综合网站| 伊人AV五月婷| 亚洲人成播放网站| 婷婷射婷婷舔| 狠狠久久婷五月综合色| 9999色色色色| 丁香久久在线| 天天舔天天插天天干| 天天天天干| 91久久综合亚洲鲁鲁五月天| 日本99在线| 91精品国产综合久久蜜芽解析速度| 97涩涩丁香五月天| 少妇性按摩无码中文A片| 五月停停999| 五月丁香偷拍| 99色日本| 97视频.干com| 久激情网| 99热这里只有精品4| 久久超级碰碰| 婷婷精品在线| 欧亚洲在线高清视频| 99激情网| 五月天激情图片| 97久久五月丁香婷婷| 日韩五月丁香| 人人妻人人澡人人爽| 天天狠狠色综合| 亚洲精品字幕| 亚洲色综久久五月| 艹色18p| www色综合| 一级内射毛片| 思思久久99| 日韩AV一区二区三区| 婷婷五月天啪啪| 色九月综合| 久久这里有精品在线观看| 9久久狠狠的| w婷婷五月婷婷w| 色婷婷网大全在线| 五月丁香综合激情网| 婷婷日本色| 狠狠色狠狠操| 日韩综合网络男女香蕉a片| 九九色99| 五月丁香婷婷AV天堂| 色婷婷成人做爰A片免费看网站 | 五月丁香六月情| 色黄啪啪| 五月丁香六月婷| 久久丁香五月综合六月激情红杏视频 | 99超碰欧美| 情涩婷婷五月天| av五月天婷婷丁香| www久久艹| 久久五月激情| 狠狠插狠狠| AⅤ网站在线看| 91久久婷婷人人澡草| 五月丁香综合久久夜夜| 99操视频| 伊人五月网| 日本久碰| 国产在线中文字幕| er99免费视频在线| 九色地址91视频| 激情丁香九九五月综合网| 综合婷婷久久| 婷婷色情 | 国产无套精品一区二区| 91日韩在线| 天天综合精品| 无码任你操| 蜜臀av粉嫩av懂色av| 国产亚洲99久久精品| 色亚洲视频| 伊大人久久| 大婷婷色呦呦噜噜色呦呦噜噜| 9久国产精品| 另类图片五月天| 亚洲综合狠狠艹| 99内射视频| 久久婷婷五月天懂色| 天天摸天天舔天天爽| 人人综合色| 九九九九综合| 激情综合亚洲色婷婷五月| 毛v一区二区视频| 啊v视频在线观看| 91视屏在线观看com.wwwvv| 丁香五月手机视频| www.天天干| 五月婷婷av| 99网| 91久久五月天| 日日夜夜爽爽| 99热9| 五月天丁香久久综合 | 91在线日| 久久五月天丁香| 97精品综合| WWW.夜夜| 丁香五月天天| 黄色片精品| 大伊香蕉精品视频在线 | 色5月婷婷色| www.五月天婷婷姐姐| 丁香婷婷色情| 97成人丁香| 色五月激情视频在线综合| 伊人免费视频9| 六月婷婷综合| 婷婷五月天美女21p| 99热精品少| 欧美婷婷精品激| AV中文在线| 97碰碰视频| 日韩六十路91性交电影| 日本综合色图| 五月丁香婷婷成人版| 熟妇人妻中文字幕无码老熟妇| 欧美性丁香色色五月天干干| 婷婷激情五月综合在线视频| 色播五月婷婷综合| 亚洲综合在线视频| 男人的天堂五月丁香| 亚洲成人在线观看av| 久久99网站| 色色亚洲五月天| 久久er+| 人人操97| 狠狠操狠狠爱| 狠狠色狠狠操| www.亭亭五月天| 涩综合在线| 久久久ww| 丁香婷婷91在线观看视频| 人碰人人人玩91| 婷婷亚洲天堂| 九九热在线99| 色婷婷综合网站| 久色| 色色色99| 五月天.com| 五月婷网站| 久久九九热re6这里有精品| 久久伦乱| 精品日本视频444| 欧美精品XXXXBBBB| 99精品在线| 精品久久久人妻| 中文字幕综合| 五月丁香色色| 午夜成人AV在线| 六月丁丁香| 日日夜夜狠狠操| 99思思热只有在这里看| 欧美天天干天天草| 五月丁香六月婷婷亚洲| 久久九九99亚洲国产久精综合| 激情深爱婷婷网| 亚洲九九夜夜| 五月激情五月丁香| 99成人网站| 久这里只有精品99| 久热这里有精品视频| 久久久思思热| 99'无码| 婷婷五月丁香六月伊人网| 中文无码婷婷| 精品五月视频婷婷在线观看| 亚洲精品一区无码A片| 亚洲九区| 老师的粉嫩小又紧水又多A片视频| 99热精品在线| http:色情日本com| 丁香五月天AV在线 | 伊人五月天| 欧美激情综合五月色丁香| 五月丁香婷婷三级| 99色在线视频| 亚洲啪啪啪啪| 狠狠干无码| 五月天色综合| 丰满少妇猛烈A片免费看观看| 精品国产一区二区三区四区阿崩 | 无语停婷丁香网| 日美三级| 成人欧美日韩| 午夜理论片最新午夜理论剧| 热的无码综合视频| 色五月丁香婷婷在线观看| 人人草开心五月天| 另类视频一区| 国产精品久久久久久妇女6080| 丰满少妇猛烈A片免费看观看| 九九九激情综合| 色网五月婷婷| 亚洲色图81p| 色五月成人| 99精品视频在线6| 2025天天爽天天摸| 人人操av| 婷婷色播婷婷| 色色色色色色色五月| 久久婷婷东京热大香樵| 九九综合色| 丁香八月综合激情| 可以看的AV| 亚洲综合激情五月久久| 五月激情婷婷开心| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 蜜臀九九九九| 亚洲激情久久| 色综合婷婷| 中文字幕乱码亚洲精品一区| 九九九九九九毛片| 五月婷五月婷伊人伊人五月婷| 国产婷婷五月中文字幕高清| 色婷婷六月丁香综合欲精品| 婷婷伊人五月天| 久久人妻熟女一区二区| 五月激情婷婷国产精品久久久久久| 国产老熟妇亲子乱对白| 婷婷舔| 青青草激情网| 中文字幕在线免费观看视频| 夜夜AVV| 婷婷色播婷婷| 天天日天天日天天搞| 在线视频99| 天天干天天插| 久操干| 青青草a在线| 综合久久人妻| 久久婷婷亚洲| 伊人久久大香天蕉亚洲特级| 怕怕av| 亚洲色视频| 五月丁香综合啪啪| 色九月国产| 日本天天综合| 亚洲AV综合网| www.久99| 秋霞学生妹一二级| 五月婷婷|欧美| 日本不卡高字幕在线2019| 99久久.www| 色五月av伊人| 开心五月婷婷激情| 日韩无码性爱| 久久久久99精品成人片| 久热免费| 日本一毛片| 色 五月婷婷基地| 婷婷啪啪| 婷婷综合五月天| 日韩精品视频中文字幕| 婷婷天堂站| 玖玖资源站蜜臀| 丁香色五月 97干| 骚五月婷婷| 丁香五月在线视频黑人| 日韩成人电影AV| 99久re热| 丁香五月Av| 日本欧美成人片AAAA| 影音先锋一区二区三区| 婷婷五月天电影网| 九九精品丁香花| 人人草开心五月天| 久久这里只精品| 色原狠狠综合| 五月天色裸体视频| 男妓跪趴把舌头伸进我的嘴巴| 欧美色97| 丁香六月激情综合| 色天使色综合| 色青五月天| 色爱综合网| 亚洲成人影视在线观看| 婷婷成人AV| 热久91| 天天摸天天高潮天天爽| .精品久久久麻豆国产精品| 丁香五月影院| 天堂A∨在线| 久热伊人9| 无码 色| 中文字幕无线久必| 国产99视频永久免费| 91色久| 免费黄色视频网址| 97色婷| 九九热re99re6在线精品| 亚洲成人婷婷| 91jiuseshunv| 色噜噜狠狠插综合| Www.久久| 丁香五月婷婷影院| 五月丁香六月婷婷的女人| 极品五月天| 天天色,天天操,天天射| 丰满少妇猛烈A片免费看观看| 欧美又粗又大一区二区在线观看| 色色亚洲视频| 色八月婷婷| 五月激情六月综合| 日日噜人人人做人| 天天插天天射| 襙逼网| 丁香五月五月婷婷欧美大香蕉| 中文字幕丁香五月| 偷拍丁香九月激情| 天天插天天插天天插| 久久五月丁香综合| 五月天啪啪啪| 美欧日韩国产成人在战| 久久激情视频| 久久婷婷六月| 99精品视频在线观看| 26uuuavcom| 91人久| 天天做 天天爱| 日韩欧美成人网| 婷婷另类开心| 丁香五月花影院| 天天日天天干天天插天天射| 五月婷婷性爱视频| 九九青草热| 五月久久婷婷| 99久久久| 色婷婷激情五月天在线观看| 5五月综合网亚洲| 婷婷五月天综合网| 99,色| 丰满人妻一区二区三区| 五月丁香花激情综合网| 久久久久久久久久久44| 九九热av| 婷婷六月丁香1| 91久久网站| 少妇达人正片在线播放_ikun_福利吧| www.色综合.com| 久久激情五月| 亚洲人人操BD| 日韩99视频| 99精品网| 天天爽综合网| 久99久在线| 99热在线观看| 天天摸天天舔| 成人五月天在线观看| AA片在线观看视频在线播放| 神马欧美精| 久久综合丁香激情五月| Jh7Uf088VHafNm| 婷婷五月天AV在| 婷婷色色五月天| 五月婷综合性中心| 欧美在线视频免费播放| 五月开心网| 五月婷六月| 久久激情视频| 日本三级99人妇网站| 久碰婷婷视频| 亚洲mm色| 成人Av在线大片| 91日韩在线| 这里精品| 国产99美少妇| 五月婷婷综合性爱噜噜| 九九色色| 狼人婷婷久久| 五月丁香花免费视频| 91久久综合亚洲噜噜成人在线| 激情久久久| 激情欧美丁香五月| 99热这里只有精品10| 久久码久久无清| 五月综合视频| 五月丁香欧美综合| 婷婷五月天综合色| 丁香六月婷婷综合激情欧美 | 天天干天天干天天干天天干天天| 久久99久久99精品免观看粉| 91精选国| 97福利视频| 国产密乳av一区二区三区四区| 4399在线观看免费高清电视剧| 丁香五月WWW| 国产成人精品一区二三区熟女在线| 丁香五月激情五月| 久久这里只有精品视频26| 亚洲在线资源| 国产黄色av| 国产婷婷色综合AV蜜臀AV| 婷婷五月天网址| 美国天天日天天操| 色婷婷中文字母五月丁香| 69色婷婷| 成人AV片播放| 强壮公让我夜夜高潮A片视频| 91狠狠综合网| 久久婷婷五月天蜜桃| 开心五月丁香综合久久| 婷婷久久大香蕉| 一级性感毛片| 婷婷激情久久| 婷婷五月在线视频| 色色五月天婷婷| 日本五月天网站| www狠狠| 夜夜操夜夜爽| 这里只有精品免费在线视频| 肏屄色播伊人97婷婷| 丁香五月天日韩无码| 麻豆WWWCOM内射软件| 天天色天天日| 丁香花色色网| 日韩综合天堂| 欧美日韩成人在线网站| 99久在线精品99re8热| 色五月婷婷婷婷| 色情五月丁香婷婷网| 99超级碰免费视频| 91操网| 射区导航| 婷婷色五月大香蕉在线观看| 国产亚洲成AV人片在线| 97在线日韩| 欧美性爱丁香五月| 久久婷婷青青草| 免费视频WWW在线观看网站| 五月色网| 久久这里只精品| 啪啪一区| 丁香色婷婷| 日本不卡中文字幕| 丁香九九九九| 在线视频另类| 色综合久久888| 五月天婷婷影院| 91人人操人人| 玖玖精品视频| 天天日天天爽| 99亚洲天堂| 亚洲第一综合| 欧美精品XXXXBBBB| 少妇2做爰HD韩国电影| 亚洲无AV在线中文字幕| 国产精产国品一二三在观看| 婷婷在线五月综合| 超级碰 久久9| 狠狠色网| 日韩精品999| 亚洲av网站| 久久99久久99久久99人受| 开心五月激情网| 色婷婷WWW| 婷婷五月天视| 狠狠操天天日| 久久这里有精品视频| 六月丁香VA| 婷婷五月激情中文字幕| 久久 婷婷 五月天| 五月天婷婷久久视频| 国产激情久久| 操大屄五月天视频| 亚洲成人无码片| 久热69| 五月丁香999| 成人精品一区二区三区四区五区| 狠狠操天天日| 婷婷五月亚洲一本在线丁香| 9久热在线视频精品| 综合久久婷婷| 亚洲精品久久久无码| 91九色PORNY大屁股| 婷婷成人在线| 色色色激情| 六月婷婷日| 亚洲AV色婷婷人禽五月天| 丁香五月天视频| 久久九色| 亚洲精品一区中文字幕乱码| 九九九九无码| 亚洲激情av| 精品福利911| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 精品综合网在线| 99综合熟女| 97色色色色| 狠狠狠五月婷婷六月丁香| 婷婷丁香18| 久热这里只有精品6| 日日噜噜夜夜狠狠久久丁香五月| 日本99视频精品免费播放| 激情小说五月天| 好好干av| 九九精品综合| 成人免费黄色短视频| 狠狠色网| 91免费在线视频6| 激情五月小说婷婷| 99色在线| 激情五月天婷婷色色色色色色色色色色色 | 开心五月网| 五月婷婷啪啪| 东京热人妻一区二区三区在线| 九久9精品| 中文字幕色色色| 亚洲av成人在线| 国产麻豆视频| 婷婷精品免费久久| 毛片毛片毛片毛片| 激情丁香五月婷婷| 免费成人中文字幕| 五月丁香婷婷在线综合蜜桃| 狠狠草在线观看| www.狠狠| 91成人电影| 五月婷综合网| 99热这里只有精品在线| 99日在线观看视频| 五月天婷婷色播| 五月丁香六月婷婷久久肏| 四川BBB搡BBB爽爽视频| 婷婷色丁香五月| 六月婷婷久久大全| 日本三级中国三级99人妇网站| 97超级碰碰碰| 甈你aaaaa| www.五月.com| 婷婷丁香五月激情密臀av| 欧洲激情五月天| 另类图片色五月| 久综合九综合99| 五月丁香爱婷婷深深| 激情深爱五月天| 五月丁香婷婷伊人| 激情六月丁香综合| 99热综合在线| 97超碰在线观看免费| 日本丁香五月婷婷| 精品久久99码| 操日本三片99| 天天干com| 亚洲无AV在线中文字幕| 五月丁香婷婷综合网| 综合网亚洲| 九色在线五月婷婷网址| 五月丁香久久综合| AV在线免费播放| 性爱五月婷婷| 99热99热| 国产真人做爰视频免费| 婷婷丁香69精华| 欧洲亚洲午夜| 成人啪啪色婷婷久| 天天干com| 亚洲愉拍99热成人精品| 安息电影在线观看完整版| 成人 在线 日韩| 激情图片99| 天天综合在线网| 五月丁香婷婷钟和色图| xxx综合在线| 这里只有精品视频| 亚洲精品网站色视频| 五月色网| 五月丁香色色| 欧美日本国产欧美日本韩国99| 婷婷五月激情综合啪啪| 夜夜操,天天撸| 九月丁香网婷婷| 六月色五月天天婷婷| 国产又粗又大又爽又黄| www.minyis.com【JT】实力收量可预付TG@LXSPSW8| 91久久婷婷| 色播婷婷大香蕉| av久热| 伊人婷婷大香蕉| 91人操人人人操人| 欧美色色色色色色色色色色| 五月天激情啪啪| 久婷婷五月天影院| 九九99热久久精品66中文字幕| 69综合在线| 成人丁香| 欧美色色干| 香蕉操亚洲| 日本三级中文字幕| 色婷婷狠狠爱| 91天天操天天干天天射| www.色五月| 天天色月| 丁香九月婷婷| 26uu| 91九色偷拍| 丁香五月激情五月开心五月| 天花AV无码| 婷婷五月色激情欧美激情| 操日本三片99| 超碰9| 97人人干| 激情五月激情综合网| 色插综合网| 99se丁香| 精品无吗va视频免费观看| 超碰国产AV| 91久久综合亚洲鲁鲁五月天| 97人人干| 丰满少妇猛烈A片免费看观看| 五月综合在线婷婷图片| 91狼友视频在线观看| 婷婷六月丁| 中文字幕日韩成人| 538在线精品| 婷婷色播六月无码| 91精品91久久久久77777| 丁香婷婷噜噜| WWW.久久久久久久| 五月丁香六月色| 精品无码人妻一区| 五月色亭丁香| 成人精品人妻| 欧日韩AV| 伊人大香蕉毛片| 99这里都是精品| 天天插天天玩天天干| 免费视频在线观看的网站| 日本社区五月天激情| 国产avapp 网| 亚洲丁香花色| 日韩欧美一级大黄网站| 九九re精品视频在线观看| 欧美日综合| 久久人妻人人槡| 免费97碰碰| 91chinese在线| 激情婷婷五月天日本系列| 台湾无码A片一区二区| 色九月婷婷| 桔色成人在线| 久久草大香蕉| 91麻豆国产三级精品福利在线观看| 激情综合五月婷婷丁香| 婷婷欧美激情综合| 中文字幕人妻一区二区| 在线观看的av| renre人人操国产超碰在线| 色99免费视频中文| 五月丁香啪啪啪| 色色色色色网站| 九九久久综合| 久久人人添人人爽添人人片αV| 久久在线大香蕉| 少妇人妻人伦A片| www.婷婷.com| 思思热国产视频| 色呦呦在线| 天天干夜夜想| 无码九九| 婷婷丁香www视频日本韩国| 天天爽天天日| 丁香五月综合AV在线| 掩去也综合五月视频| 久久免费少妇高潮99精品| 香蕉狠狠爱视频| 思思精品久久艹| 97干免费视频| 亚洲九九99精品视频在线播放| 五月丁香婷婷综合久久| 五月丁香婷庭在线| 91九色首页| 日日操夜夜操中国无码| 激情婷婷五月天| 色噜噜狠狠色综合日日| 五月亭亭六月激情| 9久久久久| 67194中文在线| 97色色色| 久热69| 丁香五月激情婷婷| 亚洲无码成人网| 欧美成人日韩| www五月婷婷| 丁香六月激情| 天天综合色丁香| 午夜电影网VA内射| 免费视频舔| 182TV大香蕉| 婷婷五月丁香四射| 影音先锋女人AA鲁色资源| 激情婷婷丁香五月天| 直接看的av| 五月天激情播播网| 六月丁香色色色| 亚洲成人电影在线免费观看| 日本猛少妇色XXXXX猛叫| 日本久久婷| 六月激情久久| 五月天另类小说久久小说网| 热久久思思热思思| 免费黄色视频网址| 噜噜干日本| 天天干狠狠艹| 青娱乐美女福利视频美臀| 97人妻碰碰中文无码久热丝袜| 五月天婷婷狠狠| 天天久久九九| www.91av.com| 99热这里有精品| 国产欧洲欧洲精品久久| 91碰| 亚洲成人无码网站| 99久在线精品99re8热| 国产成人va在线| 色五月激情五月丁香五月婷婷啪啪综合| 久久婷婷色| 免费啪啪亚州视频| 婷婷五月色情| 久久综合五月婷婷| 国产AV成人精品| 日本黄色一级| 少妇人妻丰满做爰XXX| 噜噜噜狠狠色综合| 99免费在线视频| 99热九九热| 91操片| 婷婷九月亚洲| 五月丁香啪啪啪| 色色性爱视频| 九九婷婷网五月天| 成人精品亚洲性爱| 婷婷午夜天| 天天爽天天爽视频| 亚洲va欧洲va国产va不卡| 婷婷 月 丁香| 久色欧美| 色欲一二三| www.minyis.com【JT】实力收量可预付QQ2101460746 | 超碰色天堂| 中文字幕第四色.999| 五月婷婷黄色毛片| 91操在线观看| 色婷婷五月天偷拍| 另类精品视频在线观看| 六月丁香综合| 丁香五月综合婷婷| 久久女婷| eeuus五月婷| 深爱激情四射| 午夜不卡成人一区二区| 99久久精品网| 99视频网| 99视频在线精品| 91热视频色网站| 色色五月丁香婷婷| 婷婷五月激情五月激情| 激情第四色| 99无码| 亚洲狠狠终合停停终合| 九九色黄色| 青青草网武则天| 9999热在线免费观看| 一区视频网站| WWW.天天日| 99热20| 婷婷五月天激情AV影院| 婷婷瑟瑟五月天| 久久婷婷五月综合色丁香| 91男同| 狠狠操狠狠插| 婷婷五月天VI| 中文字幕+中文在线| 手机在线日韩视频中文字幕| 色999亚洲人成色| 青青操绿aaa一区日v| 天天操天天操天天操| Www.激情| 九九综合色综合| 一本色道久久综合狠狠躁小说| 99国产精品白浆在线观看免费 | 96精品国产综合久久久久久| 99久久玖玖| 这里只有精品日韩| 色大综合| 丁香五月偷拍| 丁香五月天啪啪| 黄色片久久| 五月天之色情综合网| 婷婷精品视频| 色五月婷婷丁香婷婷| 九九婷婷网五月天| 久久99视频| 国外亚洲成AV人片在线观看| 99久热在线精品99re6热| 亚洲婷婷丁香| 99热这只有| 婷婷五月激情视频在线| 狠狠操狠狠爱| WWW色五月| 97人妻碰碰碰久久香蕉| 99久久这里只有精品免费官网| 久99热| 丁香五月天网站| 三级片AAA久久久AAA久久久AAA| 九九久久高清| 色色色综合视频| 99热精品中文字幕| site:pnnrt.com| 久久男人网婷婷| 99自拍视频在线观看| 99热九九在线| 丁香五月欧美激情| 人人摸人人操人人爱| 综合狠狠干| 天色综合网站| 九九综合色综合| 亚洲V国产V欧美V久久久久久| 五月婷婷六月丁香首页| 99爱免费在线观看| 日韩在线观看亚洲| 亚洲色情激情丁香五月| 伊人五月综合网| 99精品视频在线观看| 亚洲综合另类| 天天操天天操| 五月激情网站| 天天草女人| 91久久久久久久久18| 99国产小视频| 五月丁香六月激情| 国产99久9在线| 俺五月| 久99视频| 99热免费18| 欧洲亚洲最新精品| 91视频综合网| 五月丁香久久久| 丁香九月婷婷| 五月丁花六月丁香综合| 中文字幕无码人妻少妇免费视频| 婷婷趴趴| 99成人小视频| 91丨九色丨熟女高潮| 六月婷婷九月丁香| 99性感视频| 激情第四色| 国内一级精品| 五月天色婷婷伊人网| 色九月| 天天操无码| 丁香六月婷婷综合缴| 成人草榴视频| www.五月天婷婷.com| 操操自拍| 丁香婷婷老司机久操| 婷婷丁香人妻| AV操操操| 99狠狠色| 丁香五月天啪啪| 国产毛片操B| 综合激情五月丁香9999久久精| 99热免费精品| 9 1 A v久久久| 亚洲久久婷婷| 免费看欧美成人A片无码| 少妇高潮一区二区三区99欧美| 六月激情综合| 九九久99免费视频| 大伊久久| 天天干天天拍| 99色区| 成片免费观看视频大全| 五月天社区婷婷丁香社区| 激情五婷网| 熟女色色一区二区| 欧美激情丁香五月天久久婷婷一区| 啪啪91| 99re视频在线播放| 五月天淫乱视频| 操婷婷基地| 久久er99| 久久综合五月情| 丁香婷婷五月六月天| 国产69久久久欧美黑人A片 | 丁香综合网| 五月天综合激情网| 七七色色综合| 在线只有精品| 色色色色色色五月婷婷| 亚洲色激情| 色爱爱综合网| 婷婷五月精品中文字幕| 婷婷六月丁香五月图区| 久久婷婷欧美| www久视频com| 欧美性爱特黄一级aaaassss| 亚洲精品久久久久久久久久吃药 | 婷婷五月天激情AV影院| 五月婷婷综合在线亚洲视频| 天天日夜夜操五月| 影音先锋91网站在线观看| 五月丁香婷婷婷婷综合网| 国产精品18久久久| 天天干天天干天天干天天干天天干天天干天天 | 95精品区一区二| 99热骚货| 色综合激情图区| 天天日日爽| 久超免费视频| 99在线精品视频在线观看| jiZZdr| 中文字幕无码人妻少妇免费视频| 精品视频这里只有精品| 五月色丁香| sS丁香五月婷婷| 丁香激情五月| 岛国资源网| 六月婷婷综合网2| 五月婷婷我| 国产操逼视频网站| 五月丁香色婷婷| 久久超视频| 丁香六月婷婷开心| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 26uuu精品一区二区| 美臀自射自家人妻| 国产肥白大熟妇BBBB视频| 五月天自拍视频| 碰碰碰碰碰99| 操逼巨乳91| 丁香五月大香蕉| 高清一区二区三区日本久| 激情五月天婷婷视频| 啪啪啪丁香五月| 久色| 思思99热这里只有精品| 丁香五月影院| 天天射影视综合网| 激情五月婷婷她| 日本三级中国三级99| 欧美激情丁香五月| 风流少妇A片一区二区蜜桃| 欧美日韩AAA| 有哪些A片网站| 97久久草草超级碰碰碰| 日本久久99| 电影蜘蛛女| 99干免费视频| 久9热视频| 狠狠草天天草| 丁香五月婷婷社区| 九九无码| 99热这里只有精品268| 国产日产亚系列精品版优势| 九九精品网| 丁香婷婷五月激情| 无码少妇高潮喷水A片免费| 久久这里只| 97婷婷狠狠| 另类少妇人与禽zOZZ0性伦| 99re这里只有精品视频了| 成人婷婷| 三年高清大片免费观看国语| 欧美五月丁香| 欧美激情丁香五月| 日本91在线播放| 91大神操美女| 五月婷婷六月爱| 久久天堂精品| 日日日日日| 天天日夜夜帕| 婷婷色综合| 亚洲AV成人无码精品| 综合色五月| www.五月激情红色| 99狠狠| 免费无码毛片一区二区A片| 天天插综合网| 深爱五月综合网| 一起草aV| 99这里只有精品| 九九成人视频| 婷婷免费成人视频| 久久一级片| 99这里有精品视频| 色婷婷久久| 五月丁香直播| 久超超碰| 五月激香蕉网| 激情五月天丁香| 自拍盗摄 另类| 日本女天天爽| 91丁香| www.9操| 在线成人网站| 日韩在线婷婷五月天综合| 热99精品视频在线观看| 888久久久| 狠狠CAO日日穞夜夜穞AV | 狠狠情色| 婷婷99狠狠躁天天久久久九九九| 五月天丁香综合| 99热99这里只有精品| 天天玩天天摸| 91人碰| 五月天丁香啪啪网| 九九热在线观看视频| 激情综合激情综合| 亚洲日韩26uuu| 婷婷综合网站| 97狠狠碰| 国产亚洲精品AAAAAAA片| 欧美日比视频| 色99欧洲色19| 婷婷国产日本欧美| 亚洲成人AV在线观看| 大香蕉久久久久久久久| 国产毛多水多女人A片| 九九RE视频在线精品| 高清无码视频网址| 这里只有国产精品在线| 五月丁香六月久久| 色www.con| 婷婷日本在线| 中国女人做爰A片| 婷婷精品| 超碰在线观看9| 亚洲激情.com| 五月天成人手机在线视频| 激情五月激情综合俺也去婷婷小说| 97热在线精品| 超爽内射| 五月天色软件| 欧美成人一区二区三区在线视频| 色色色色色色网| 久久精品4| 九九在线精品| 色五月女| 激情五月综合网最新| 色 五月婷婷基地|