当前位置: 首页 > java >正文

QNX 编译框架梳理(草稿 10%)

示例

# gaoyang3513@Server-Ubuntu22:~/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP$
# 环境初始化
$ source /home/gaoyang3513/Workspaces/qnx800/qnxsdp-env.sh
QNX_HOST=/home/gaoyang3513/Workspaces/qnx800/host/linux/x86_64
QNX_TARGET=/home/gaoyang3513/Workspaces/qnx800/target/qnx
MAKEFLAGS=-I/home/gaoyang3513/Workspaces/qnx800/target/qnx/usr/include# 编译
make -j12

编译输出摘录

/home/gaoyang3513/Workspaces/qnx800/host/linux/x86_64/usr/bin/qcc -Vgcc_ntoaarch64 -c -O2  -Wc,-Wall -O2 -Wc,-fomit-frame-pointer  \-DBUILDENV_qss -DNDEBUG -mgeneral-regs-only -mstrict-align -fno-store-merging -fno-gcse  -fno-inline-small-functions -I. \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4/aarch64/le \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4/aarch64 \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4 \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711 \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4/overrides \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4/overrides \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/../../../../install/usr/include/xilinx \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/public \-I/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/../../../../install/usr/include \-I/home/gaoyang3513/Workspaces/qnx800/target/qnx/usr/include \-EL -DVARIANT_le -DVARIANT_rpi4 -DVARIANT_bcm2711 -DBUILDENV_qss -Wc,-MT,rpi4_board_config.o -Wc,-MMD -Wc,-MP -Wc,-MF,rpi4_board_config.dep \/home/gaoyang3513/Source/05-Raspi/02-Raspi/02-Projects/SDK_QNX_Raspi4B_BSP/src/hardware/startup/boards/bcm2711/rpi4/rpi4_board_config.c 

框架梳理

环境初始化

#--> /home/gaoyang3513/Workspaces/qnx800/qnxsdp-env.shHOST_OS=$(uname -s)                          # Linux
QNX_BASE=$(cd "${SCRIPT_DIR}"; pwd)          # /home/gaoyang3513/Workspaces/qnx800
...
case "$HOST_OS" inLinux)QNX_HOST=$QNX_BASE/host/linux/x86_64        #   /home/gaoyang3513/Workspaces/qnx800/ + host/linux/x86_64
...
QNX_TARGET=$QNX_BASE/target/qnx                 #   /home/gaoyang3513/Workspaces/qnx800/ + target/qnx
MAKEFLAGS=-I$QNX_BASE/target/qnx/usr/include    # -I/home/gaoyang3513/Workspaces/qnx800/ + target/qnx/usr/include
...
PYTHONDONTWRITEBYTECODE=1                    # SDP 环境只读
unset PYTHONPATH                             # 清除与 SDP 无关的Pythong环境设置
...
echo QNX_HOST=$QNX_HOST                      # 打印:QNX_HOST、QNX_TARGET、MAKEFLAGS
echo QNX_TARGET=$QNX_TARGET
echo MAKEFLAGS=$MAKEFLAGS

使用 MAKEFLAGS 会将该参数传递至子进程,即 -I/home/gaoyang3513/Workspaces/qnx800/target/qnx/usr/include 会一直传递给子进程,其中:

$ make --help
Usage: make [options] [target] ...
Options:...-I DIRECTORY, --include-dir=DIRECTORYSearch DIRECTORY for included makefiles.

-I DIRECTORY 用于告知 make 进程,在 ‘DIRECTORY’ 路径下查找 Makefile 文件,如下一章节中提及的

ifndef QCONFIG QCONFIG=qconfig.mk endif
include $(QCONFIG)                          

已知:当前目录下不存在 qconfig.mk 文件, 由于 -I 参数最终却能找到正确的文件’/home/gaoyang3513/Workspaces/qnx800/target/qnx/usr/include/qconfig.mk’。

Make 流程

#--> MakefileROOT_DIR := $(notdir $(CURDIR))
ifndef QCONFIG QCONFIG=qconfig.mk endif
include $(QCONFIG)                          # 当前目录下不存在 qconfig.mk 文件
unexport ROOT_DIR
...
all: install links $(if $(wildcard images/*),images)    # 主要关注目标 install@echo doneinstall: $(if $(wildcard prebuilt/*),prebuilt)$(MAKE) -Csrc hinstall$(MAKE) -Csrc#--> src/Makefile
LIST=ALL
EARLY_DIRS=lib
LATE_DIRS=
include recurse.mk
http://www.xdnf.cn/news/14648.html

相关文章:

  • (LeetCode 面试经典 150 题 ) 55. 跳跃游戏 (贪心)
  • 279. 完全平方数
  • 开发语言漫谈-R语言
  • 【全志V821_FoxPi】3-2 Linux 5.4 SPI + XPT2046触摸(ADS7846) + tslib
  • 如何进行 iOS App 混淆加固?IPA 加壳与资源保护实战流程
  • Rust——什么是高滑点交易,以及在DashMap` 中怎么快速筛选它
  • RS485 vs CAN总线:工业通信双雄的深度对决
  • 云原生灰度方案对比:服务网格灰度(Istio ) 与 K8s Ingress 灰度(Nginx Ingress )
  • Redis—持久化
  • 【Redis】Redis的下载安装和配置
  • 221. 最大正方形
  • SpringCloud系列(37)--搭建SpringCloud Gateway
  • MySQL为什么默认引擎是InnoDB?
  • 深度学习入门--(二)感知机
  • 微信小程序中scss、ts、wxml
  • DEAPDataset的EEG脑电图数据(Emotion_Prediction)使用介绍【第一期】
  • 【请关注】实操mongodb集群部署
  • APISIX
  • 鸿蒙Next仓颉开发语言中的数据类型总结分享
  • Spring 容器核心扩展实战:Spring Boot中三大扩展问题解析
  • sql格式化自动识别SQL语法结构
  • 大塘至浦北高速:解锁分布式光伏“交能融合”密码,引领绿色交通革命
  • 掌握CIS基准合规性:通过自动化简化网络安全
  • 磐维数据库PanWeiDB V2.0-S3.1.1_B01集中式一主二备安装
  • 细谈QT信号与槽机制
  • 覆盖迁移工具选型、增量同步策略与数据一致性校验
  • Unity3D仿星露谷物语开发70之背景音乐
  • 内存泄漏和内存溢出的区别
  • 【机器学习深度学习】非线性激活函数
  • Linux零基础快速入门到精通