CMake构建第三方开源库
C/C++用户库可以通过 CMake 构建第三方开源库,并将开源库提供的源码、头文件或预编译库集成到 PLC 工程中。本文以 FFTW 这类第三方源码库为例,说明如何把第三方源码加入用户库构建,并通过 IDE 菜单完成 CMake 构建和编译。
提示
本文重点说明第三方开源库的构建集成。用户库函数、功能块的接口创建和代码实现,请参考 C/C++ 用户库的其他说明文档。
操作流程
整体流程如下:
- 创建 C/C++ 用户库,并创建需要导出的函数或功能块接口。
- 将第三方开源库源码复制到用户库目录下。
- 配置第三方源码、头文件和编译选项。
- 执行 CMake构建,检查 CMake 配置是否正确。
- 执行 编译,生成用户库构建产物。
- 在 ST 程序中调用用户库 导出的函数或功能块。
创建C/C++用户库
在工程中创建一个 C/C++ 用户库。例如创建名为 fftw 的用户库,并创建一个函数 FFT_TEST 作为 ST 侧调用入口。
创建完成后,工程树中会出现用户库节点。WasomeCodeX_AI 会为该用户库自动生成 CMakeLists.txt、.MODULE 目录和接口框架代码。
典型目录结构如下:
MODULES/
└── fftw/
├── .MODULE/
│ └── cpp/
├── implements/
│ └── cpp/
├── CMakeLists.txt
└── wa_module.h
放置第三方源码
将第三方开源库源码复制到当前 C/C++ 用户库目录下。以 FFTW 为例,可将解压后的 fftw-3.3.10 放到 MODULES/fftw 目录中。
MODULES/
└── fftw/
├── .MODULE/
├── implements/
├── fftw-3.3.10/
│ ├── api/
│ ├── dft/
│ ├── kernel/
│ ├── rdft/
│ ├── reodft/
│ ├── simd-support/
│ └── config.h
├── CMakeLists.txt
└── module.cmake
注意
建议把第三方源码放在用户库目录内部,不建议引用工程外部的绝对路径。这样工程迁移、打包和多人协作时不容易出现路径失效问题。
第三方库内容通常按以下方式接入:
| 类型 | 示例 | 处理方式 |
|---|---|---|
| 源码库 | .c、.cpp | 加入 MOD_EXTRA_SRC 或 MOD_FULL_SRC |
| 头文件 | .h、.hpp | 加入包含路径 |
| 静态库 | .a | 加入链接库 |
| 目标文件 | .o、.obj | 作为额外源文件或链接输入加入 |
配置第三方源码参与编译
用户库的 CMake 配置有两种方式:
| 方案 | 做法 | 适用场景 |
|---|---|---|
| 方案一 | 直接修改 CMakeLists.txt | 临时验证、快速试验 |
| 方案二 | 创建 module.cmake | 推荐用于正式工程和长期维护 |