Files
Inbox/系统基座文件/1/1.4/1.4.5 产物输出与安装规则 (Artifact Output & Installation Rules).md
2025-12-11 07:24:36 +08:00

3.1 KiB
Raw Permalink Blame History

tags, date created, date modified
tags date created date modified
星期三, 十一月 19日 2025, 7:50:36 晚上 星期三, 十一月 19日 2025, 7:51:09 晚上

1.4.5 产物输出与安装规则 (Artifact Output & Installation Rules)

审计综述 项目采用了**“集中式输出”策略,极大地方便了开发阶段的调试与运行。然而,主构建脚本完全缺失了安装规则 (install)**,这意味着无法通过 make install 将产物打包或部署到系统目录当前仅限于在构建目录Build Tree内运行。

1. 输出目录布局 (Output Directory Layout)

  • 关键性P1

  • 策略解析

    • 集中管理:通过设置 CMAKE_RUNTIME_OUTPUT_DIRECTORY 等变量,强制将所有生成物归档到 ${CMAKE_BINARY_DIR}/bin${CMAKE_BINARY_DIR}/lib
    • 优势
      • 避免了编译产物散落在源码目录深处In-source build pollution
      • 简化了 RPATH 的管理,因为所有库都在同一个相对路径下。
      • 方便了 numactl 等工具的调用路径书写(如 1.3.3 中所示)。
  • 探测依据

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
    

2. 安装规则状态 (Installation Rule Status)

  • 关键性P2 (Missing)

  • 策略解析

    • 现状grep "install(" 显示主项目(appsignal_lib未定义任何安装规则。仅有的安装指令来自第三方依赖GTest和 SDK 内部文件。
    • 影响:运行 make install 将不会复制雷达主程序或库文件。对于目前的 Demo / 原型开发阶段,这是可接受的。
    • 改进建议:若项目进入生产交付阶段,必须补充 install(TARGETS main_app DESTINATION bin) 等指令以便生成发布包RPM/DEB
  • 探测依据

    grep -r "install("# (无主项目相关输出)
    

3. 调试符号与剥离策略 (Debug Symbol Strategy)

  • 关键性P2

  • 策略解析

    • 物理状态file 命令显示 not stripped说明符号表Symbol Table保留可支持 nmgdb 查看函数名堆栈。
    • 调试信息readelf 未找到 .debug 段。这是因为当前处于 Release 模式(-O3 -DNDEBUG),编译器默认不生成 DWARF 源码级调试信息。
    • 结论:这是标准的 Release 构建产物,兼顾了性能(优化开启)和基础可维护性(崩溃时能看到函数名)。
  • 探测依据

    file …/main_app
    … not stripped
    

1.4 章节最终总结:构建系统与工程配置

至此,我们完成了对 1.4 构建系统 的全方位审计。我们确立了该项目的**“构建基线”**

  1. 核心CMake 4.1 + Unix Makefiles。
  2. 编排Host(GCC) + Device(Clang) 显式分离,禁用原生 CUDA 语言支持。
  3. 标志:适配了 CoreX SDK 的 -x ivcore 方言,但缺少 Host 端的架构优化 (-march=armv8-a)。
  4. 布局:产物集中输出到 build/binRPATH 自动注入,安装规则待补。