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