C/C++库的开发说明
介绍了在用户C/C++库开发过程中如何正确引用和支持集成第三方库的源码、wasm格式的.a文件或.o文件,包括CMake配置方法和项目目录结构说明。
CMake配置说明
以下是引用第三方库的module.cmake文件配置示例,每个步骤都配有详细说明:
# 设置C++标准版本为C++17
set(CMAKE_CXX_STANDARD 17)
# 1. 引入第三方库的路径 (包含.cpp/.h文件或者wasm格式的.a, .obj文件)
set(DEPS_DIR ${CMAKE_CURRENT_LIST_DIR}/deps)
set(RUCKIG_DIR ${DEPS_DIR}/ruckig)
set(PLCOPEN_MC_DIR ${DEPS_DIR}/plcopen-motion-eci)
set(MC_CPP_DIR ${CMAKE_CURRENT_LIST_DIR}/implements/cpp)
# 添加宏定义,用于条件编译
add_definitions(-DRTMOTION)
# 2. 添加第三方库的文件
aux_source_directory(${PLCOPEN_MC_DIR}/library/algo/common/src PLCOPEN_MOTION_SRC)
list(REMOVE_ITEM PLCOPEN_MOTION_SRC "${PLCOPEN_MC_DIR}/library/algo/public/src/trajectory.cpp")
list(REMOVE_ITEM PLCOPEN_MOTION_SRC "${PLCOPEN_MC_DIR}/library/algo/public/src/time_optimal_trajectory_generation.cpp")
aux_source_directory(${PLCOPEN_MC_DIR}/library/fb/common/src PLCOPEN_MOTION_SRC)
aux_source_directory(${RUCKIG_DIR}/src/ruckig RUCKIG_SRC)
list(REMOVE_ITEM RUCKIG_SRC "${RUCKIG_DIR}/src/ruckig/wasm.cpp")
# 3. 添加第三方库的头文件
include_directories(${CMAKE_CURRENT_LIST_DIR}
${PLCOPEN_MC_DIR}/library
${DEPS_DIR}/ruckig/include)
# 4. 指定模块的源文件
set (MC_SRC
${MC_CPP_DIR}/MC_Halt.cpp
${MC_CPP_DIR}/MC_Home.cpp
${MC_CPP_DIR}/MC_MoveAbsolute.cpp
)
set(MOD_EXTRA_SRC
${RUCKIG_SRC}
${PLCOPEN_MOTION_SRC}
)
SET(MOD_FULL_SRC
# ${RUCKIG_SRC}
# ${PLCOPEN_MOTION_SRC}
${MC_SRC}
${CMAKE_CURRENT_LIST_DIR}/.MODULE/cpp/wa_interface.cpp
)
set (PLCOPEN_MC_PART1_SRC
${RUCKIG_SRC}
${PLCOPEN_MOTION_SRC}
)
用户库文件目录结构
以下是用户库项目目录结构:
.
├── implements # 实现文件目录
│ └── cpp # C++实现文件
├── mc.h # 头文件
├── .MODULE # 模块目录(自动生成)
│ ├── cpp # 模块生成的C++文件
│ └── interface.WAMOD # 模块接口定义文件
├── module.cmake # CMake构建配置文件
└── wa_module.h # 模块头文件