Lely CANopen configure 配置项与日志解读
@[toc]
1. configure 在构建链路中的位置
configure 属于 GNU Build System 的配置阶段。它不会直接把 Lely 源码编译成库,而是读取命令行参数、探测工具链和目标系统能力,然后生成 Makefile、config.h、.pc 文件和 libtool 相关脚本。后续 make 才进入编译阶段。
一个典型的交叉编译配置命令可以写成:
1 | ../configure \ |
这条命令包含两类信息:一类是“目标平台和安装位置”,另一类是“功能裁剪策略”。前者影响工具链选择和安装目录,后者影响 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=DIR |
C/C++ 头文件安装目录。 |
--oldincludedir=DIR |
非 GCC 场景的传统头文件目录。 |
--datarootdir=DIR |
架构无关只读数据根目录。 |
--datadir=DIR |
架构无关数据目录。 |
--infodir=DIR |
info 文档目录。 |
--localedir=DIR |
本地化数据目录。 |
--mandir=DIR |
man 文档目录。 |
--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=aix | svr4 |
--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
1 | ../configure --host=aarch64-poky-linux --prefix=<INSTALL_PREFIX> \ |
第一行是传入 configure 的显式策略:目标平台由 --host 指定,安装根目录由 --prefix 指定,Python、Cython、测试和单元测试被关闭。第二行说明 Yocto SDK 提供了 site 配置,configure 会从中读取交叉编译相关默认值,例如 sysroot、工具链路径或缓存结果。
5.2 build / host / target
1 | checking build system type... x86_64-pc-linux-gnu |
build 是执行构建命令的机器,host 是生成程序未来运行的目标系统,target 对普通库项目通常跟 host 一致。这里 build 与 host 不同,因此进入交叉编译路径。
5.3 基础构建工具
1 | checking for a BSD-compatible install... /usr/bin/install -c |
这些是 Autotools/Automake 构建脚本所需的基础命令。(cached) 表示该结果已被缓存或前面已经探测过,不是异常。
5.4 覆盖率与 Valgrind 开关
1 | checking whether to build with code coverage support... no |
覆盖率未启用,Valgrind 可执行程序未找到。若没有开启相关测试目标,这类 no 不构成构建中断。后面又检测到 valgrind/valgrind.h,说明头文件与可执行程序是两类独立检查。
5.5 C 编译器探测
1 | checking for aarch64-poky-linux-gcc... aarch64-poky-linux-gcc ... --sysroot=<TARGET_SYSROOT> |
configure 找到了交叉 C 编译器,并验证它可以编译最小测试程序。none needed 表示编译器默认模式已能满足对应 C 标准测试,无需额外 -std= 参数。
5.6 系统头文件探测
1 | checking for ANSI C header files... yes |
这些检查用于判断目标 sysroot 中的 C 库头文件能力。minix/config.h... no 只是说明目标系统不是 Minix 风格,不是错误。__EXTENSIONS__ 与系统兼容宏有关。
5.7 C++ 编译器与 C++11
1 | checking whether we are using the GNU C++ compiler... yes |
Lely core 是 C 库为主,但提供部分 C++ 接口和 C++ CANopen application library。该段确认目标 C++ 编译器可用,并能通过 -std=gnu++11 支持 C++11。
5.8 Libtool、链接器与 binutils
1 | checking for ld used by aarch64-poky-linux-gcc... aarch64-poky-linux-ld --sysroot=<TARGET_SYSROOT> |
这一段属于 libtool 初始化。它确定链接器、符号表工具、归档工具和 ranlib 是否与目标三元组匹配,这决定后续 .so、.a 和 libtool wrapper 的生成方式。
5.9 非前缀工具警告
1 | checking for aarch64-poky-linux-mt... no |
mt 是 Windows manifest 相关工具。当前目标是 Linux/ARM64,日志中虽然出现 warning,但紧接着判断 mt 不是 manifest tool;对 Linux CANopen 库构建一般不是关键路径。文章中应解释为“非关键工具探测警告”,而不是当作主失败点。
5.10 PIC、共享库与静态链接测试
1 | checking ... option to produce PIC... -fPIC -DPIC |
-fPIC 通过,说明可生成位置无关代码,满足共享库构建。-static works... no 表示用 -static 生成完全静态可执行文件的测试没有通过;它不等同于不能生成静态库,因为后面 build static libraries... yes 仍然成立。
5.11 运行时库、线程和 pkg-config
1 | checking for qemu-aarch64... qemu-aarch64 |
这部分确认 QEMU、POSIX timer、pthread 和 pkg-config。未找到带目标前缀的 pkg-config,但找到了 SDK host sysroot 中的 pkg-config;交叉编译场景需要进一步关注它是否配套设置了 PKG_CONFIG_SYSROOT_DIR、PKG_CONFIG_LIBDIR 等。
5.12 测试、Valgrind 头文件、SocketCAN 与 Linux 接口
1 | checking for CPPUTEST... no |
CppUTest 未找到,但单元测试已通过配置参数关闭;SocketCAN、CAN error、CAN raw、netlink、rtnetlink、epoll、ioctl 等 Linux 头文件可用,说明目标 sysroot 支持 Lely Linux CAN/I/O 相关构建路径。
5.13 Bluetooth 与 BlueZ
1 | checking for bluetooth/bluetooth.h... yes |
Lely 的 I/O 层在 Linux 下可探测 BlueZ/Bluetooth RFCOMM。官方安装文档说明 Bluetooth 支持不是 CANopen stack 的必需条件,因此这类能力更多影响可选 I/O 支持。
5.14 Doxygen 与生成阶段
1 | checking for doxygen... no |
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 日志末尾出现以下模式时,说明它已经完成探测并开始生成构建系统文件:
1 | configure: creating ./config.status |
如果出现 configure: error: ...,则通常表示配置阶段被中断,需要根据错误项补依赖、修工具链路径或调整 --enable/--disable/--with 参数。
9. 参考资料
Lely CANopen:Installation。说明 GNU Build System 构建流程、依赖项、
autoreconf -i、../configure --disable-cython、make、make check、make 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查看完整配置项。














