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

Lely CANopen configure 配置项与日志解读

Lely CANopen configure 配置项与日志解读

文章目录

  • Lely CANopen configure 配置项与日志解读
    • 1. configure 在构建链路中的位置
    • 2. configure 可传入配置的主要类别
      • 2.1 通用控制
      • 2.2 安装路径
      • 2.3 程序名变换
      • 2.4 系统类型与交叉编译
      • 2.5 Autotools/Libtool 构建行为
      • 2.6 平台能力裁剪
      • 2.7 EDS/DCF 与对象字典裁剪
      • 2.8 CANopen 协议服务裁剪
      • 2.9 C++ application、工具、测试、Python、文档
      • 2.10 外部包与工具链搜索
      • 2.11 常用环境变量
    • 3. 常见配置组合如何理解
    • 4. configure 日志应按阶段阅读
    • 5. 输入日志逐段说明
      • 5.1 命令行与 site script
      • 5.2 build / host / target
      • 5.3 基础构建工具
      • 5.4 覆盖率与 Valgrind 开关
      • 5.5 C 编译器探测
      • 5.6 系统头文件探测
      • 5.7 C++ 编译器与 C++11
      • 5.8 Libtool、链接器与 binutils
      • 5.9 非前缀工具警告
      • 5.10 PIC、共享库与静态链接测试
      • 5.11 运行时库、线程和 pkg-config
      • 5.12 测试、Valgrind 头文件、SocketCAN 与 Linux 接口
      • 5.13 Bluetooth 与 BlueZ
      • 5.14 Doxygen 与生成阶段
    • 6. 日志中容易误读的点
    • 7. 判断 configure 是否进入生成阶段
    • 9. 参考资料

1. configure 在构建链路中的位置

configure属于 GNU Build System 的配置阶段。它不会直接把 Lely 源码编译成库,而是读取命令行参数、探测工具链和目标系统能力,然后生成Makefileconfig.h.pc文件和 libtool 相关脚本。后续make才进入编译阶段。

一个典型的交叉编译配置命令可以写成:

../configure\--host=aarch64-poky-linux\--prefix=<INSTALL_PREFIX>\--disable-python\--disable-cython\--disable-tests\--disable-unit-tests

这条命令包含两类信息:一类是“目标平台和安装位置”,另一类是“功能裁剪策略”。前者影响工具链选择和安装目录,后者影响 Python、测试、CANopen 模块、C++ 接口等是否进入构建目标。

2. configure 可传入配置的主要类别

下面按用途列出本地configure --help中出现的主要参数。表中的“禁用”通常意味着对应代码、构建目标或条件宏会被关闭;但具体是否彻底移除,还要看该模块与其他模块之间的依赖关系。

2.1 通用控制

参数作用
-h, --help显示帮助并退出。
--help=short只显示当前包相关的短帮助。
--help=recursive显示当前包及子包的短帮助。
-V, --version显示 configure 版本信息。
-q, --quiet, --silent减少checking ...输出,适合脚本环境。
--cache-file=FILE把探测结果缓存到指定文件;重复配置时可减少探测开销。
-C, --config-cache等价于--cache-file=config.cache
-n, --no-create只执行探测,不生成 Makefile/config.h 等输出文件。
--srcdir=DIR指定源码目录;用于 out-of-tree build。

2.2 安装路径

参数作用
--prefix=PREFIX安装根目录,默认/usr/local。头文件、库、工具默认都会落到该前缀下。
--exec-prefix=EPREFIX架构相关文件的安装根目录,默认继承PREFIX
--bindir=DIR用户可执行程序安装目录,默认EPREFIX/bin
--sbindir=DIR系统管理程序安装目录,默认EPREFIX/sbin
--libexecdir=DIR内部辅助可执行程序安装目录。
--sysconfdir=DIR只读单机配置目录,默认PREFIX/etc
--sharedstatedir=DIR可修改、架构无关的共享状态目录。
--localstatedir=DIR可修改、单机本地状态目录。
--runstatedir=DIR运行期状态目录。
--libdir=DIR库文件安装目录,交叉编译多架构安装时常显式指定。
--includedir=DIRC/C++ 头文件安装目录。
--oldincludedir=DIR非 GCC 场景的传统头文件目录。
--datarootdir=DIR架构无关只读数据根目录。
--datadir=DIR架构无关数据目录。
--infodir=DIRinfo 文档目录。
--localedir=DIR本地化数据目录。
--mandir=DIRman 文档目录。
--docdir=DIR项目文档安装根目录。
--htmldir=DIR / --dvidir=DIR / --pdfdir=DIR / --psdir=DIR不同格式文档的安装目录;是否生成文档还受--disable-doc、Doxygen 等影响。

2.3 程序名变换

参数作用
--program-prefix=PREFIX给安装的程序名添加前缀。
--program-suffix=SUFFIX给安装的程序名添加后缀。
--program-transform-name=PROGRAM用 sed 表达式转换安装程序名。

2.4 系统类型与交叉编译

参数作用
--build=BUILD构建机三元组;通常自动推断。
--host=HOST目标运行平台三元组;与 build 不同时进入交叉编译。
--target=TARGET主要用于构建编译器等工具链;普通库项目一般等于 host。

2.5 Autotools/Libtool 构建行为

参数作用
--disable-option-checking忽略无法识别的--enable-*/--with-*选项。
--enable-silent-rules / --disable-silent-rules控制 make 输出详细程度。
--disable-maintainer-mode关闭维护者规则,避免普通构建触发 Autotools 重新生成。
--enable-code-coverage开启覆盖率构建,通常用于测试和 CI。
--enable-valgrind在单元测试中启用 Valgrind。
--disable-valgrind-memcheck跳过 Valgrind memcheck 测试。
--disable-valgrind-helgrind跳过 Valgrind helgrind 线程检测。
--disable-valgrind-drd跳过 Valgrind drd 线程检测。
--disable-valgrind-sgcheck跳过 Valgrind sgcheck。
--enable-dependency-tracking启用依赖跟踪,增量构建更准确但可能更慢。
--disable-dependency-tracking关闭依赖跟踪,加快一次性构建。
--enable-shared[=PKGS]构建共享库,默认 yes。
--enable-static[=PKGS]构建静态库,默认 yes。
--enable-fast-install[=PKGS]启用 libtool 快速安装优化。
--disable-libtool-lock禁用 libtool 锁;可能影响并行构建可靠性。

2.6 平台能力裁剪

参数作用
--disable-rt禁用 Realtime Extensions。
--disable-threads禁用多线程支持;官方文档对应LELY_NO_THREADS
--enable-ecss-compliance启用 ECSS 合规构建路径,主要面向特定合规/测试需求。
--disable-errno禁用 errno;官方文档说明这也会禁用 C++ 支持,因为 C++ API 依赖 errno 处理异常。
--disable-malloc禁用动态内存分配;官方文档说明该支持仍是 preliminary,且会禁用 C++ 支持。
--disable-stdio禁用标准 I/O;errno 或 malloc 被禁用时也会自动禁用 stdio。
--disable-cxx禁用 C++ 接口,并禁用整个 C++ CANopen application library。
--disable-daemon禁用 daemon/service 支持;stdio 被禁用时会自动禁用。
--disable-diag禁用诊断函数输出;诊断接口仍可调用但无效果。
--disable-canfd禁用 CAN FD,缩小通用 CAN 消息结构;编译库和应用时宏设置需要一致。

2.7 EDS/DCF 与对象字典裁剪

参数作用
--disable-dcf禁用 EDS/DCF 支持。
--disable-dcf-restore不保存/恢复 application parameters 的 concise DCF。
--disable-obj-default禁用对象字典默认值。
--disable-obj-file禁用对象字典 UploadFile/DownloadFile 支持。
--disable-obj-limits禁用对象字典最小值/最大值约束。
--disable-obj-name禁用对象字典名称字符串。
--disable-obj-upload禁用对象字典自定义 upload indication 函数。
--disable-sdev禁用 static device description 支持。

2.8 CANopen 协议服务裁剪

参数作用
--disable-ssdo-blk禁用 Server-SDO block transfer。
--disable-csdo禁用 Client-SDO。
--disable-rpdo禁用 Receive-PDO。
--disable-tpdo禁用 Transmit-PDO。
--disable-mpdo禁用 Multiplex PDO。
--disable-sync禁用 SYNC 对象。
--disable-time禁用 TIME 时间戳对象。
--disable-emcy禁用 EMCY emergency 对象。
--disable-lss禁用 LSS Layer Setting Services。
--disable-wtm禁用 WTM Wireless Transmission Media 支持。
--disable-master禁用 CANopen master 支持。
--disable-ng禁用 node guarding。
--disable-nmt-boot禁用 NMT boot slave。
--disable-nmt-cfg禁用 NMT configuration request。
--disable-gw禁用 gateway 支持。
--disable-gw-txt禁用 ASCII gateway 支持。

2.9 C++ application、工具、测试、Python、文档

参数作用
--disable-coapp-master禁用 C++ CANopen application master 支持。
--disable-coapp-slave禁用 C++ CANopen application slave 支持。
--disable-tools禁用命令行工具构建。
--disable-tests禁用测试。
--disable-unit-tests禁用单元测试。
--disable-unit-tests-memleak禁用单元测试内存泄漏检测。
--disable-python禁用 Python tools and bindings;官方交叉编译文档说明该选项会隐含--disable-cython,并禁用 DCF tools。
--disable-python2禁用 Python 2 tools and bindings。
--disable-python3禁用 Python 3 tools and bindings。
--disable-cython不使用 Cython 生成 Python bindings;官方文档说明该绑定已属于 deprecated Python bindings。
--disable-doc禁用 Doxygen 文档生成。

2.10 外部包与工具链搜索

参数作用
--with-gcov=GCOV指定覆盖率工具 gcov。
--with-pic[=PKGS]控制 PIC/non-PIC 对象使用策略。
`–with-aix-soname=aixsvr4
--with-gnu-ld假设 C 编译器使用 GNU ld。
--with-sysroot[=DIR]在指定 sysroot 或编译器 sysroot 中搜索依赖库。
--with-ixxat[=DIR]搜索 IXXAT VCI SDK;官方文档说明会在 DIR/inc 下查找 VCI 头文件。
--with-vci[=DIR]同 IXXAT VCI SDK 搜索相关。

2.11 常用环境变量

参数作用
CC / CXX指定 C/C++ 编译器命令。
CFLAGS / CXXFLAGS指定 C/C++ 编译参数,例如优化、告警、目标架构。
CPPFLAGS指定预处理参数,例如额外 include 路径。
LDFLAGS指定链接器参数,例如额外库目录。
LIBS显式追加链接库。
CPP / CXXCPP指定 C/C++ 预处理器。
PKG_CONFIG / PKG_CONFIG_PATH / PKG_CONFIG_LIBDIR控制 pkg-config 工具及搜索路径;交叉编译时尤其重要。
CPPUTEST_CFLAGS / CPPUTEST_LIBS覆盖 CppUTest 的编译与链接参数。
LT_SYS_LIBRARY_PATH用户定义的运行期库搜索路径。

3. 常见配置组合如何理解

场景配置示例说明

| 交叉编译到 ARM64 Linux |--host=aarch64-poky-linux --prefix=<INSTALL_PREFIX>|--host触发交叉编译路径;--prefix控制安装根目录。 |

| 不构建 Python 工具/绑定 |--disable-python --disable-cython|--disable-python会关闭 Python tools and bindings,并隐含关闭 Cython 绑定;显式写出--disable-cython可增强命令可读性。 |

| 不跑测试 |--disable-tests --disable-unit-tests| 关闭测试和单元测试目标;这不等于 configure 完全不探测 CppUTest,因为脚本仍可能检查可选依赖。 |

| 只保留 C 库接口 |--disable-cxx| 关闭 C++ 接口和 C++ CANopen application library。 |

| 减少目标运行时依赖 |--disable-threads --disable-stdio --disable-daemon| 面向资源受限或无完整 POSIX 能力的运行时;需要确认应用是否依赖这些能力。 |

| 不需要 CAN FD |--disable-canfd| 缩小 CAN 消息结构;库和应用编译宏需要保持一致。 |

| 不生成文档 |--disable-doc| 避免 Doxygen/Graphviz 成为文档生成路径的依赖。 |

4. configure 日志应按阶段阅读

configure 日志的格式通常是checking ... yes/no/value。其中yes表示检查通过,no表示未找到或不支持,(cached)表示复用缓存。判断一条日志是否异常,不能只看yes/no,还要看它检查的是必需依赖、可选依赖,还是被配置项关闭的功能。

5. 输入日志逐段说明

5.1 命令行与 site script

../configure --host=aarch64-poky-linux --prefix=<INSTALL_PREFIX> \ --disable-python --disable-cython --disable-tests --disable-unit-tests configure: loading site script <YOCTO_SDK>/site-config-armv8a-poky-linux

第一行是传入 configure 的显式策略:目标平台由--host指定,安装根目录由--prefix指定,Python、Cython、测试和单元测试被关闭。第二行说明 Yocto SDK 提供了 site 配置,configure 会从中读取交叉编译相关默认值,例如 sysroot、工具链路径或缓存结果。

5.2 build / host / target

checking build system type... x86_64-pc-linux-gnu checking host system type... aarch64-poky-linux-gnu checking target system type... aarch64-poky-linux-gnu checking whether we are cross compiling... yes

build是执行构建命令的机器,host是生成程序未来运行的目标系统,target对普通库项目通常跟 host 一致。这里 build 与 host 不同,因此进入交叉编译路径。

5.3 基础构建工具

checking for a BSD-compatible install... /usr/bin/install -c checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for a sed that does not truncate output... (cached) sed

这些是 Autotools/Automake 构建脚本所需的基础命令。(cached)表示该结果已被缓存或前面已经探测过,不是异常。

5.4 覆盖率与 Valgrind 开关

checking whether to build with code coverage support... no checking for valgrind... no

覆盖率未启用,Valgrind 可执行程序未找到。若没有开启相关测试目标,这类no不构成构建中断。后面又检测到valgrind/valgrind.h,说明头文件与可执行程序是两类独立检查。

5.5 C 编译器探测

checking for aarch64-poky-linux-gcc... aarch64-poky-linux-gcc ... --sysroot=<TARGET_SYSROOT> checking whether the C compiler works... yes checking whether we are using the GNU C compiler... yes checking ... option to accept ISO C89... none needed checking ... option to accept ISO C99... none needed checking how to run the C preprocessor... aarch64-poky-linux-gcc -E ...

configure 找到了交叉 C 编译器,并验证它可以编译最小测试程序。none needed表示编译器默认模式已能满足对应 C 标准测试,无需额外-std=参数。

5.6 系统头文件探测

checking for ANSI C header files... yes checking for sys/types.h... yes checking for stdint.h... yes checking minix/config.h usability... no checking whether it is safe to define __EXTENSIONS__... yes

这些检查用于判断目标 sysroot 中的 C 库头文件能力。minix/config.h... no只是说明目标系统不是 Minix 风格,不是错误。__EXTENSIONS__与系统兼容宏有关。

5.7 C++ 编译器与 C++11

checking whether we are using the GNU C++ compiler... yes checking whether aarch64-poky-linux-g++ supports C++11 features with -std=gnu++11... yes

Lely core 是 C 库为主,但提供部分 C++ 接口和 C++ CANopen application library。该段确认目标 C++ 编译器可用,并能通过-std=gnu++11支持 C++11。

5.8 Libtool、链接器与 binutils

checking for ld used by aarch64-poky-linux-gcc... aarch64-poky-linux-ld --sysroot=<TARGET_SYSROOT> checking if the linker ... is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... aarch64-poky-linux-nm checking for aarch64-poky-linux-ar... aarch64-poky-linux-ar checking for aarch64-poky-linux-ranlib... aarch64-poky-linux-ranlib

这一段属于 libtool 初始化。它确定链接器、符号表工具、归档工具和 ranlib 是否与目标三元组匹配,这决定后续.so.a和 libtool wrapper 的生成方式。

5.9 非前缀工具警告

checking for aarch64-poky-linux-mt... no checking for mt... mt configure: WARNING: using cross tools not prefixed with host triplet checking if mt is a manifest tool... no

mt是 Windows manifest 相关工具。当前目标是 Linux/ARM64,日志中虽然出现 warning,但紧接着判断mt不是 manifest tool;对 Linux CANopen 库构建一般不是关键路径。文章中应解释为“非关键工具探测警告”,而不是当作主失败点。

5.10 PIC、共享库与静态链接测试

checking ... option to produce PIC... -fPIC -DPIC checking ... PIC flag -fPIC -DPIC works... yes checking ... static flag -static works... no checking whether ... linker supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes

-fPIC通过,说明可生成位置无关代码,满足共享库构建。-static works... no表示用-static生成完全静态可执行文件的测试没有通过;它不等同于不能生成静态库,因为后面build static libraries... yes仍然成立。

5.11 运行时库、线程和 pkg-config

checking for qemu-aarch64... qemu-aarch64 checking for timer_create in -lrt... yes checking whether pthreads work with "-pthread" and "-lpthread"... yes checking for PTHREAD_PRIO_INHERIT... yes checking for aarch64-poky-linux-pkg-config... no checking for pkg-config... <SDK_HOST_SYSROOT>/usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes

这部分确认 QEMU、POSIX timer、pthread 和 pkg-config。未找到带目标前缀的 pkg-config,但找到了 SDK host sysroot 中的 pkg-config;交叉编译场景需要进一步关注它是否配套设置了PKG_CONFIG_SYSROOT_DIRPKG_CONFIG_LIBDIR等。

5.12 测试、Valgrind 头文件、SocketCAN 与 Linux 接口

checking for CPPUTEST... no checking valgrind/valgrind.h usability... yes checking linux/can.h usability... yes checking linux/can/raw.h presence... yes checking sys/epoll.h presence... yes checking sys/ioctl.h presence... yes

CppUTest 未找到,但单元测试已通过配置参数关闭;SocketCAN、CAN error、CAN raw、netlink、rtnetlink、epoll、ioctl 等 Linux 头文件可用,说明目标 sysroot 支持 Lely Linux CAN/I/O 相关构建路径。

5.13 Bluetooth 与 BlueZ

checking for bluetooth/bluetooth.h... yes checking for bluetooth/rfcomm.h... yes checking for library containing str2ba... -lbluetooth

Lely 的 I/O 层在 Linux 下可探测 BlueZ/Bluetooth RFCOMM。官方安装文档说明 Bluetooth 支持不是 CANopen stack 的必需条件,因此这类能力更多影响可选 I/O 支持。

5.14 Doxygen 与生成阶段

checking for doxygen... no checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands

Doxygen 未找到只影响 API 文档生成。末尾进入config.status并生成顶层 Makefile、各子目录 Makefile、pkg-config 文件和config.h,表示 configure 已完成“生成构建系统文件”这一阶段。

6. 日志中容易误读的点

日志现象正确理解

|checking for CPPUTEST... no| CppUTest 未找到;如果单元测试目标已关闭,它不是主构建路径的中断点。 |

|checking for doxygen... no| Doxygen 未找到;通常只影响 API 文档生成。 |

|checking ... static flag -static works... no| 表示完全静态链接测试未通过;不等于不能生成.a静态库。 |

|configure: WARNING: using cross tools not prefixed with host triplet| 某个工具没有目标三元组前缀;需要结合具体工具判断。这里出现在mt相关探测中,通常不是 Linux/ARM CANopen 库的关键工具。 |

|python/.../Makefile仍被创建 | Autotools 可生成子目录 Makefile,但实际是否参与构建由 Automake 条件和 configure 变量决定。 |

|pkg-config没有目标前缀 | 交叉编译中常见;关键是是否使用 SDK 提供的 pkg-config,并且路径变量是否指向目标 sysroot。 |

7. 判断 configure 是否进入生成阶段

configure 日志末尾出现以下模式时,说明它已经完成探测并开始生成构建系统文件:

configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands

如果出现configure: error: ...,则通常表示配置阶段被中断,需要根据错误项补依赖、修工具链路径或调整--enable/--disable/--with参数。

9. 参考资料

  • Lely CANopen:Installation。说明 GNU Build System 构建流程、依赖项、autoreconf -i../configure --disable-cythonmakemake checkmake install

  • Lely CANopen:Cross-compilation。说明--host=HOST交叉编译,以及--disable-python会隐含--disable-cython并禁用 DCF tools。

  • Lely CANopen:Build configuration。说明--disable-cxx--disable-threads--disable-errno--disable-malloc--disable-stdio--disable-daemon--disable-diag--disable-canfd等配置项和对应预处理宏。

  • Lely core libraries Doxygen 首页。说明可通过./configure --help查看完整配置项。

http://www.gsyq.cn/news/1591472.html

相关文章:

  • 高自主一体化AI设备,降低工厂质检运维压力
  • STM32-S145语音播报+4种商品+4步进电机出货+选货+库存+缺货提醒+找零+声光提醒+按键+TFT彩屏+(无线方式选择)-2(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章
  • AdMob 突发限流?先别慌,按这 4 步排查
  • 理解数据库的“读写分离”与“分库分表”
  • Django学习教程(十七)Django分页功能实现
  • HTTP 403绕过实战:从权限校验到未授权访问的攻防解析
  • 开源BuildingAI企业级实战:智能体+知识库+RAG一站式办公平台
  • 旋进旋涡流量计可以测量哪些介质呢?
  • 算法设计中的鸽巢原理、归约与组合设计应用
  • 星纵物联WS50x智能开关面板,开关升级一步到位
  • 雷电模拟器部署Frida全攻略:从环境配置到Hook实战
  • 我用QClaw的命理大师体验玄学,AI结果令我震惊了
  • 孩子挑食、面色黄、总生病?可能缺的不是饭,是“营养素”
  • 阿里云PolarDB MySQL版完全使用指南:从集群创建到SQL语法实战
  • MySQL 事务 ACID 四大特性 + 四大隔离级别(面试高频考点)
  • Ice终极指南:解锁macOS菜单栏管理新境界
  • 由于找不到WnSkinPreview.dll,无法继续执行代码
  • 结对编程指南:方法、优势、挑战与实践建议
  • 如何用OCR做无货源电商自动化系统(完整变现链路)
  • PHP开发者的福音!这套开源商城源码,堪称二开界的“瑞士军刀”!
  • 自对偶杨-米尔斯理论单圈修正与非线性李共形代数量子命运探析
  • 夏季达沃斯把物理 AI 推上 C 位:AI 正在从虚拟世界走向物理世界
  • 【计算机毕业设计】基于SSM框架的宠物智能托管系统的设计与实现
  • SEO优化与AI品牌信息建设的工程对比
  • RDK X5 部署 FCOS 目标检测模型实战:Anchor-Free 单阶段检测器
  • 高并发压力测试,vLLM 在 AMD Instinct GPU 上的极限吞吐量揭秘
  • 高并发私域怎么玩?分享一个基于E云管家底层底座的【微信私域自动化】分流脚本
  • 2026年6月亲测,选审计机构看这份报告
  • 基于碰撞避免矢量场的移动椭圆障碍物局部运动规划算法matlab复现
  • 51单片机模拟快递货柜GSM短信系统112-2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)