93、【OS】【Nuttx】【構建】cmake menuconfig 目標

【聲明】本博客所有內容均為個人業余時間創作,所述技術案例均來自公開開源項目(如Github,Apache基金會),不涉及任何企業機密或未公開技術,如有侵權請聯系刪除

背景

接之前 blog
【OS】【Nuttx】【構建】cmake 支持構建的目標
之前分析了怎么查看 cmake 支持構建的目標,里面著重分析了 menuconfig 這個目標,這個也是這篇 blog 的主題,下面就來看 menuconfig 這個目標的細節

menuconfig 目標

上篇 blog 分析的是一些準備環境,接下來分析的,是 cmake 配置工程的關鍵,menuconfig.cmake 腳本中,menuconfig 目標的構建規則如下
在這里插入圖片描述
有幾個關鍵點講下:

  • add_custom_target:創建一個自定義構建目標,這里名字叫 menuconfig,執行這個目標并不會編譯代碼,而是執行一系列命令
  • 下面來詳細分析這個目標會執行的命令,42 行第一條:啟動配置界面。這里簡單講下里面幾個關鍵字:
    ${CMAKE_COMMAND}:cmake 的可執行文件路徑,比如 /usr/bin/cmake
    在這里插入圖片描述
    -E:啟用 cmake 的命令行模式
    env:子命令,設置環境變量并運行程序
    ${KCONFIG_ENV}:之前定義的環境變量列表,上篇 blog 【OS】【Nuttx】【構建】cmake 支持構建的目標 分析過
    在這里插入圖片描述
    ${MENUCONFIG}:要運行的命令,比如 menuconfig(Linux),guiconfig(Windows)
    在這里插入圖片描述
    所以最后等價于在終端執行如下命令,命令執行完后,會彈出一個菜單界面,和 make menuconfig 一樣,可以選擇內核功能
/usr/bin/cmake -E env KCONFIG_CONFIG=~/nuttx_pdt/nuttx/build/.config EXTERNALDIR=dummy APPSDIR=~/nuttx_pdt/nuttx-apps DRIVERS_PLATFORM_DIR=dummy APPSBINDIR=~/nuttx_pdt/nuttx/build/nuttx-apps BINDIR=~/nuttx_pdt/nuttx/build ~/nuttx_pdt/nuttx/menuconfig
  • 43 ~ 44 行是第二條命令:刪除舊的配置頭文件。這里有兩個關鍵字:
    remove -f:強制刪除文件(類似 rm -f)
    ${CMAKE_BINARY_DIR}/include/nuttx/config.h:由 .config 轉換而來的關鍵頭文件,直接參與 Nuttx 編譯
    在這里插入圖片描述
    config.h 是由 .config 文件自動生成的,包含所有配置宏信息,如果不刪除,即使改了 .config,cmake 在構建時也會認為它沒變,影響到重新生成,而導致配置沒生效;刪除是為了強制下一次構建時重新生成 config.h,確保配置生效;這是一種構建時失效緩存的常見策略:主動刪除舊結果,強制重新生成
  • 46 行是第三條命令:觸發 CMake 重新配置,這里也有幾個關鍵點:
    touch:更新文件的時間戳(類似 Linux 的 touch 命令,如果文件不存在,就創建一個,如果文件存在,就更新下時間戳)
    ${CMAKE_PARENT_LIST_FILE}: 包含當前文件的 cmake 文件完整路徑,該 menuconfig.cmake 文件是在 Nuttx 項目的根目錄 CMakeLists.txt 被展開的,所以其實也就是 Nuttx 根目錄下的 CMakeLists.txt 文件,更新下這個文件的時間戳在這里插入圖片描述
    這里 touch 下 Nuttx 根目錄下的 CMakeLists.txt 文件,是因為 cmake 構建依賴文件時間戳,來判斷是否需要重新運行配置;當修改 .config 后,源碼文件本身沒變,cmake 判斷沒有文件改變,就不會自動重新生成 Makefile,此時通過 touch 關鍵的 CMakeLists.txt,來欺騙 cmake 說這里有個文件被修改了,要重新運行 cmake 構建,確保修改配置后,整個構建系統能感知到變化,重新生成配置后的構建產物
  • 47 行:設置命令執行時的工作目錄為 NUTTXDIR,{NUTTX_DIR},NUTTXD?IR{NUTTX_DIR} 是 Nuttx 項目根目錄(這里有總構建入口 CMakeLists.txt 和內核配置 Kconfig 文件)
  • 48 行:USES_TERMINAL 告訴構建系統(比如 make),這個 menuconfig 目標需要交互式終端,此時構建系統會使用終端資源,來給用戶顯示 curses 圖形界面

ok,先分析到這里,下篇 blog 分析構建目標時遇到的問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94554.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 表單處理:移動端輸入場景下的卡頓問題與防抖優化方案

文章目錄每日一句正能量前言一、問題場景與表現二、技術攻堅過程三、優化效果與經驗沉淀每日一句正能量 山再高,往上攀,總能登頂;路再長,走下去,終將到達。每日一勵,勇往直前。 前言 在移動端 React 項目開…

數據安全防護所需要的關鍵要素

數據安全防護是一個覆蓋數據全生命周期(采集、存儲、傳輸、處理、銷毀)、融合技術、管理、流程與人員的系統性工程。其核心目標是保障數據的??保密性(Confidentiality)、完整性(Integrity)、可用性&#…

【JavaEE】(8) 網絡原理 HTTP/HTTPS

一、什么是 HTTP 協議 上節說到,應用層的協議需要約定通信的內容和數據格式。我們可以自定義應用層協議,也可以基于現成的應用層協議進行開發。協議的種類很多,最常見的之一就是 HTTP,廣泛用于網站和手機 App。準確來說&#xff0…

C語言的數組與字符串練習題4

C語言的數組與字符串練習題4 16. 數組元素去重 題目描述: 編寫一個C程序,輸入一組整數存儲在數組中,去除數組中的重復元素,并輸出去重后的數組。 解題思路: 遍歷數組,對于每個元素,檢查它之前是否已經存在相同的元素。如果不存在,則將其保留;否則,跳過。可以使用一…

Transformers簡單介紹 - 來源于huggingface

Transformers介紹 - 來源于huggingface 文章目錄Transformers介紹 - 來源于huggingfaceTransformers能做什么pipeline()函數零樣本分類推理API完形填空命名實體識別問答摘要提取翻譯transformers是如何工作的transformers的具體組成注意力層機制transformers原始結構architectu…

template<typename R = void> 意義

在 C 中&#xff0c;template<typename R void> 表示定義一個模板參數 R&#xff0c;其默認類型為 void。這意味著&#xff1a;如果用戶沒有顯式指定 R&#xff0c;則 R 默認為 void。如果用戶顯式指定了 R&#xff08;如 template<typename R void> 后面跟著 &l…

國產3D大型裝配設計新突破①:圖紙打開設計雙加速 | 中望3D 2026

本文為CAD芯智庫整理&#xff0c;未經允許請勿復制、轉載&#xff01;在中望3D 2026的新版中&#xff0c;不僅在設計效率上進行了重大優化&#xff0c;更是在裝配方面實現了突破性的改進&#xff0c;讓每一個項目都能快速、精確地從概念變為現實。 中望3D2026亮點速遞裝配篇將…

游戲開發狀態機與行為樹的優缺點

在游戲開發中&#xff0c;狀態機&#xff08;Finite State Machine, FSM&#xff09; 和行為樹&#xff08;Behavior Tree, BT&#xff09; 是兩種常用的 AI 邏輯控制框架&#xff0c;分別適用于不同場景&#xff0c;其優缺點對比可從靈活性、維護成本、適用場景等多個維度分析…

Linux下ELF文件的介紹

目錄 1.溫故知新 2.ELF文件介紹 3.ELF文件組成 4.ELF文件形成到加載 5.連接過程 1.溫故知新 上一篇博客&#xff0c;我們介紹了我們的動靜態&#xff0c;知道了我們的庫其實也是文件&#xff0c;如果我們想寫一個庫也是可以的&#xff0c;我們的把我們的庫文件編譯成.o文件…

人工智能領域、圖歐科技、IMYAI智能助手2025年6月更新月報

2025年6月AI領域重要模型更新與平臺優化匯總 摘要&#xff1a; 本文匯總了2025年6月期間AI領域發布的多項重要模型更新及平臺功能優化信息&#xff0c;涵蓋Google Gemini、阿里通義萬相、字節豆包、百度文心一言、MiniMax海螺02、Google Veo3、快手可靈2.1、FLUX Kontext等模型…

從零開始學Express,理解服務器,路由于中間件

當我們初學前端時&#xff0c;常常只關注頁面效果和交互&#xff0c;但隨著項目復雜度提升&#xff0c;我們遲早會遇到“服務端”的問題&#xff1a;如何讓一個頁面的數據是從數據庫來的&#xff1f;怎么讓不同的用戶看到不同的內容&#xff1f;這時候&#xff0c;我們就需要一…

Codeforces Round 987 (Div. 2)

ABC 略D預處理出每個位置的前綴最大和后綴最小。從后向前枚舉&#xff0c;如果一個數無法后移&#xff0c;那么答案就是最大前綴&#xff0c;否則答案要不是前綴最大&#xff0c;要不就是這個數先移到前綴最大位置再移到能移到的最大的位置此處的答案。用線段樹維護#include<…

Javascript/ES6+/Typescript重點內容篇——手撕(待總結)

前端核心知識點梳理與面試題詳解 1. Promise 核心知識點 Promise 是異步編程的解決方案&#xff0c;用于處理異步操作三種狀態&#xff1a;pending&#xff08;進行中&#xff09;、fulfilled&#xff08;已成功&#xff09;、rejected&#xff08;已失敗&#xff09;狀態一旦改…

[自動化Adapt] 父子事件| 冗余過濾 | SQLite | SQLAlchemy | 會話工廠 | Alembic

第五章&#xff1a;事件處理與融合 歡迎回到OpenAdapt探索之旅~ 在第四章&#xff1a;系統配置中&#xff0c;我們掌握了如何定制化系統參數。更早的第一章&#xff1a;錄制引擎則展示了系統如何捕獲海量原始操作數據。 假設我們需要訓練機器人輸入"hello"一詞。原…

組合期權:跨式策略

文章目錄0.簡介1.買入跨式組合&#xff08;Long Straddle&#xff09;1.1 適用場景?1.2 合約選擇1.3 損益分析1.4 案例示范2.賣出跨式組合&#xff08;Short Straddle&#xff09;2.1 適用場景?2.2 合約選擇2.3 損益分析2.4 案例示范3.小結參考文獻0.簡介 跨式策略是一種交易…

Vue計算屬性詳解2

可寫計算屬性 計算屬性默認是只讀的,但在特殊場景下,我們可以創建"可寫"的計算屬性,通過同時提供getter和setter實現: <script setup>import { ref, computed } from vueconst firstName = ref(John)const lastName = ref(Doe)const fullName = computed(…

UniStorm 5.3.0 + Unity2022 + URP配置說明

一、前言 以前我用的是UniStorm3.0&#xff0c;主要用在內置管線里面&#xff0c;最近想在URP管線里面使用UniStorm天氣系統&#xff0c;于是弄了UniStorm5.3.0的包&#xff0c;在Unity2022.3的URP模式下配置&#xff0c;直接導入package&#xff0c;兩次宣告失敗。最后看了官方…

力扣經典算法篇-44-組合總和(回溯問題)

1、題干 給你一個無重復元素的整數數組candidates和一個目標整數 target &#xff0c;找出 candidates 中可以使數字和為目標數 target 的 所有 不同組合 &#xff0c;并以列表形式返回。你可以按 任意順序 返回這些組合。 candidates 中的 同一個 數字可以 無限制重復被選取 。…

矩陣與高斯消元:數學算法在計算機領域的應用

一、概述和基本概念 矩陣&#xff0c;類似于在 C 中我們看到的二維數組。它有兩個維度&#xff0c;行和列。下面是一個典型的矩陣&#xff1a; M[12342345445610111213] M \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 4 & 4 & 5 &…

【補題】CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) D. K-good

題意&#xff1a;給一個n&#xff0c;如果能被k個數整除&#xff0c;要求這k個數%k后不相同&#xff0c;問如果可以&#xff0c;任意k是多少&#xff0c;如果不可以輸出-1 思路&#xff1a; D. K-good_牛客博客 從來沒見過&#xff0c;太詭異了&#xff0c;做題做少了 1.…