GN ninja 工程化構建例程

請添加圖片描述

文章目錄

  • 1. 前言?
  • 2. 工程實例??
    • 2.1 工程目錄結構
    • 2.2 工程頂層.gn文件
    • 2.3 工具鏈配置.gn文件
    • 2.4 編譯配置.gn文件
    • 2.5 編譯目標配置.gn文件
    • 2.6 工程接口文件
    • 2.7 動態庫編譯.gn文件
    • 2.8 動態庫源文件
    • 2.9 靜態庫編譯.gn文件
    • 2.10 靜態庫源文件
    • 2.11 主程序編譯.gn文件
    • 2.12 主程序源文件
    • 2.13 工程頂層.gn文件
  • 3. 編譯&測試
  • 參考


1. 前言?

本文通過一個簡單的C語言工程構建實例,主要描述通過GN和ninjia如何構建、編譯。

各位小伙伴,如果你是剛接觸GN、ninja構建,這個實例工程非常適合你參考、學習,該實例包括靜態庫、動態庫的編譯、鏈接,還有對編譯工具鏈的配置,編譯輸出的配置等,如果對你有幫助,請點贊??????、轉發,評論&交流??。????????????


2. 工程實例??

2.1 工程目錄結構

.
├── BUILD.gn
├── README.md
├── build
│   ├── BUILD.gn
│   ├── BUILDCONFIG.gn
│   └── toolchains
│       └── BUILD.gn
├── include
│   └── utils.h
├── lib
│   ├── shared
│   │   ├── BUILD.gn
│   │   └── dlib.c
│   └── static
│       ├── BUILD.gn
│       └── slib.c
├── out
│   └── Default
│       ├── args.gn
│       ├── build.ninja
│       ├── build.ninja.d
│       ├── build.ninja.stamp
│       ├── libshared.so
│       ├── main
│       ├── obj
│       └── toolchain.ninja
├── src
│   └── main
│       ├── BUILD.gn
│       └── main.c
└── third_party13 directories, 19 files

2.2 工程頂層.gn文件

BUILD.gn

# 頂層group定義
group("all") {deps = ["//lib/static","//lib/shared","//src/main"]
}

2.3 工具鏈配置.gn文件

build/toolchains/BUILD.gn

# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.toolchain("gcc") {tool("cc") {depfile = "{{output}}.d"command = "gcc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}"depsformat = "gcc"description = "CC {{output}}"outputs = ["{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",]}tool("cxx") {depfile = "{{output}}.d"command = "g++ -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}"depsformat = "gcc"description = "CXX {{output}}"outputs = ["{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",]}tool("alink") {rspfile = "{{output}}.rsp"command =

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

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

相關文章

基于亞博K210開發板——內存卡讀寫文件

開發板 亞博K210開發板 實驗目的 本實驗主要學習 K210 通過 SPI 讀寫內存卡文件的功能 實驗準備 實驗元件 開發板自帶的 TF 卡、LCD 顯示屏 (提前準備好 FAT32 格式的TF 卡。TF 插入 TF 卡槽的時候注意方向,TF 卡的金手指那一面需要面向開發板&am…

51單片機實驗五:A/D和D/A轉換

一、實驗環境與實驗器材 環境:Keli,STC-ISP燒寫軟件,Proteus. 器材:TX-1C單片機(STC89C52RC)、電腦。 二、 實驗內容及實驗步驟 1.A/D轉換 概念:模數轉換是將連續的模擬信號轉換為離散的數字信…

C++ 常用的智能指針

C 智能指針 一、智能指針類型概覽 C 標準庫提供以下智能指針&#xff08;需包含頭文件 <memory>&#xff09;&#xff1a; unique_ptr&#xff1a;獨占所有權&#xff0c;不可復制&#xff0c; 可移動shared_ptr&#xff1a;共享所有權&#xff0c;用于引用計數weak_pt…

6.8.最小生成樹

一.復習&#xff1a; 1.生成樹&#xff1a; 對于一個連通的無向圖&#xff0c;假設圖中有n個頂點&#xff0c;如果能找到一個符合以下要求的子圖&#xff1a; 子圖中包含圖中所有的頂點&#xff0c;同時各個頂點保持連通&#xff0c; 而且子圖的邊的數量只有n-1條&#xff0…

Spring Boot 集成金蝶 API 演示

? Spring Boot 集成金蝶 API 演示&#xff1a;登錄 / 注銷 Cookie 保存 本文將通過 Spring Boot 完整實現一套金蝶接口集成模型&#xff0c;包括&#xff1a; ? 普通登錄? AppSecret 登錄? 注銷? Cookie 保存與復用 &#x1f4c5; 項目結構 src/ ├── controller/ │…

React 受控表單綁定基礎

React 中最常見的幾個需求是&#xff1a; 渲染一組列表綁定點擊事件表單數據與組件狀態之間的綁定 受控表單綁定是理解表單交互的關鍵之一。 &#x1f4cd;什么是受控組件&#xff1f; 在 React 中&#xff0c;所謂“受控組件”&#xff0c;指的是表單元素&#xff08;如 &l…

基于FPGA的AES加解密系統verilog實現,包含testbench和開發板硬件測試

目錄 1.課題概述 2.系統測試效果 3.核心程序與模型 4.系統原理簡介 4.1 字節替換&#xff08;SubBytes&#xff09; 4.2 行移位&#xff08;ShiftRows&#xff09; 4.3 列混合&#xff08;MixColumns&#xff09; 4.4 輪密鑰加&#xff08;AddRoundKey&#xff09; 4.…

6.5 GitHub監控系統實戰:雙通道采集+動態調度打造高效運維體系

GitHub Sentinel Agent 定期更新功能設計與實現 關鍵詞:GitHub API 集成、定時任務調度、Python 爬蟲開發、SMTP 郵件通知、系統穩定性保障 1. GitHub 項目數據獲取功能 1.1 雙通道數據采集架構設計 #mermaid-svg-ZHJIMXcMAyDHVhmV {font-family:"trebuchet ms",v…

Explorer++:輕量級高效文件管理器!!

項目簡介 Explorer 是一款專為Windows操作系統設計的輕量級且高效的文件管理器。作為Windows資源管理器的強大替代方案&#xff0c;它提供了豐富的特性和優化的用戶體驗&#xff0c;使得文件管理和組織變得更加便捷高效。無論是專業用戶還是普通用戶&#xff0c;都能從中受益&a…

7、生命周期:魔法的呼吸節奏——React 19 新版鉤子

一、魔法呼吸的本質 "每個組件都是活體魔法生物&#xff0c;呼吸節奏貫穿其生命始終&#xff0c;"鄧布利多的冥想盆中浮現三維相位圖&#xff0c;"React 19的呼吸式鉤子&#xff0c;讓組件能量流轉如尼可勒梅的煉金術&#xff01;" ——以霍格沃茨魔法生理…

理解計算篇--正則表達式轉NFA--理論部分

空正則表達式轉NFA單字符正則表達式轉NFA拼接正則表達式轉NFA選擇正則表達式轉NFA重復正則表達式轉NFA 正則表達式轉NFA–實戰部分 空正則表達式轉NFA 轉換步驟&#xff1a; 構建1個只有1個狀態的NFA起始狀態也是接受狀態沒有規則&#xff0c;即規則集為空 單字符正則表達式…

穩態模型下的異步電機調速【運動控制系統】

異步電動機&#xff1a; n1是同步轉速&#xff08;電機和磁芯同步時候的轉速&#xff09; n&#xff1a;電機的實際轉速 異步電動機恒壓頻比的概念&#xff0c;為什么基頻以下可以采取恒壓頻率&#xff0c;基頻以上不可以采用恒壓頻比&#xff1a; 異步電動機的恒壓頻比&…

【KWDB 創作者計劃】_算法篇---Stockwell變換

文章目錄 前言一、Stockwell變換原理詳解1.1 連續S變換定義1.2 離散S變換1.3簡介 二、S變換的核心特點2.1頻率自適應的時頻分辨率2.1.1高頻區域2.1.2低頻區域 2.2無交叉項干擾2.3完全可逆2.4相位保持2.5與傅里葉譜的直接關系 三、應用領域3.1地震信號分析3.2生物醫學信號處理3.…

云計算(Cloud Computing)概述——從AWS開始

李升偉 編譯 無需正式介紹亞馬遜網絡服務&#xff08;Amazon Web Services&#xff0c;簡稱AWS&#xff09;。作為行業領先的云服務提供商&#xff0c;AWS為全球開發者提供了超過170項隨時可用的服務。 例如&#xff0c;Adobe能夠獨立于IT團隊開發和更新軟件。通過AWS的服務&…

Python爬蟲第17節-動態渲染頁面抓取之Selenium使用下篇

目錄 引言 一、獲取節點信息 1.1 獲取屬性 1.2 獲取文本值 1.3 獲取ID、位置、標簽名、大小 二、切換Frame 三、延時等待 3.1 隱式等待 3.2 顯式等待 四、前進后退 五、Cookies 六、選項卡管理 七、異常處理 引言 這一節我們繼續講解Selenium的使用下篇&#xff0…

容器docker入門學習

這里寫目錄標題 容器容器的軟件廠商 dockerdocker引擎 虛擬化虛擬化技術 docker安裝詳解1、安裝檢查2、安裝yum相關的工具3、安裝docker-ce軟件4、查看docker版本5、啟動docker服務6、設置docker開機啟動7、查看有哪些docker容器運行進程8、查看容器里有哪些鏡像9、下載nginx軟…

文獻總結:NIPS2023——車路協同自動駕駛感知中的時間對齊(FFNet)

FFNet 一、文獻基本信息二、背景介紹三、相關研究1. 以自車為中心的3D目標檢測2. 車路協同3D目標檢測3. 特征流 四、FFNet網絡架構1. 車路協同3D目標檢測任務定義2. 特征流網絡2.1 特征流生成2.2 壓縮、傳輸與解壓縮2.3 車輛傳感器數據與基礎設施特征流融合 3. 特征流網絡訓練流…

git 出現 port 443 Connection timed out

梯子正常延遲不算嚴重&#xff0c;但在使用git push時反復出現 fatal: unable to access https://github.com/irvingwu5/xxxx.git/ Error in the HTTP2 framing layer Failed to connect to github.com port 443 after 136353 ms: Connection timed out 將git的網絡配置與梯子…

【2025年4月18日】android studiio最新設置沉浸式狀態欄教程

&#x1f62b;【2025年4月18日】搞了一整天&#xff0c;終于完美搞定 Android 沉浸式狀態欄&#xff08;WebView 本地HTML&#xff09; 最近在做一個個人項目&#xff0c;用 Android 加載本地 HTML 做個小工具。按理說用 WebView 加載頁面很簡單嘛——結果沉浸式狀態欄這個坑…