--- tags: [] date created: 星期三, 十一月 19日 2025, 7:50:36 晚上 date modified: 星期三, 十一月 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 中所示)。 - **探测依据**: ```cmake set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) ``` **2. 安装规则状态 (Installation Rule Status)** - **关键性**:**P2 (Missing)** - **策略解析**: - **现状**:`grep "install("` 显示主项目(`app` 和 `signal_lib`)**未定义任何安装规则**。仅有的安装指令来自第三方依赖(GTest)和 SDK 内部文件。 - **影响**:运行 `make install` 将不会复制雷达主程序或库文件。对于目前的 Demo / 原型开发阶段,这是可接受的。 - **改进建议**:若项目进入生产交付阶段,必须补充 `install(TARGETS main_app DESTINATION bin)` 等指令,以便生成发布包(RPM/DEB)。 - **探测依据**: ```bash grep -r "install(" … # (无主项目相关输出) ``` **3. 调试符号与剥离策略 (Debug Symbol Strategy)** - **关键性**:**P2** - **策略解析**: - **物理状态**:`file` 命令显示 `not stripped`,说明符号表(Symbol Table)保留,可支持 `nm` 或 `gdb` 查看函数名堆栈。 - **调试信息**:`readelf` 未找到 `.debug` 段。这是因为当前处于 **Release** 模式(`-O3 -DNDEBUG`),编译器默认不生成 DWARF 源码级调试信息。 - **结论**:这是标准的 Release 构建产物,兼顾了性能(优化开启)和基础可维护性(崩溃时能看到函数名)。 - **探测依据**: ```bash 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/bin`,RPATH 自动注入,安装规则待补。