You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于open62541、CMake与Conan生成自定义OPC-UA信息模型遇问题

使用Conan构建的open62541配合CMake生成自定义OPC-UA信息模型的问题解决

问题场景

通过Conan安装open62541包后,使用VS17编译项目时,调用open62541提供的ua_generate_nodeset_and_datatypes CMake宏无法生成自定义命名空间的.c和.h文件,同时出现警告MSB8065: Custom build for item x succeeded, but specified output x has not been created.。但手动执行nodeset_compiler.py命令可以成功生成目标文件:

python C:/.conan/62d0ea/1/res/tools/nodeset_compiler/nodeset_compiler.py --types-array=UA_TYPES --existing C:/.conan/29713a/1/src/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml --xml myNS.xml myNS

问题排查与修复步骤

1. 校验路径变量的正确性

CMake宏依赖的open62541_TOOLS_DIR和open62541_NODESET_DIR必须与手动命令中的路径完全匹配:

  • 检查${CONAN_USER_OPEN62541_tools_dir}是否正确指向nodeset_compiler.py所在目录,可在CMakeLists.txt中添加打印验证:
    message(STATUS "open62541_TOOLS_DIR: ${CONAN_USER_OPEN62541_tools_dir}")
    
  • 确认open62541_NODESET_DIR指向的目录下,Schema/Opc.Ua.NodeSet2.xml文件存在,避免路径错误导致无法加载标准节点集。

2. 补充宏的依赖节点集参数

手动命令中通过--existing指定了依赖的标准节点集,但原CMake宏仅设置了DEPENDS_TYPES,缺少对应配置。需在ua_generate_nodeset_and_datatypes中添加DEPENDS_NS参数:

ua_generate_nodeset_and_datatypes(
    NAME "myNamespace"
    FILE_NS "${PROJECT_SOURCE_DIR}/myNS.xml"
    DEPENDS_TYPES "UA_TYPES"
    # 对应手动命令的--existing参数
    DEPENDS_NS "${open62541_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml"
)

3. 对齐输出前缀配置

手动命令的输出前缀是myNS,而宏中NAME设为myNamespace,需确认宏是否自动映射输出文件名。若存在差异,添加OUTPUT_PREFIX参数强制指定输出前缀:

ua_generate_nodeset_and_datatypes(
    NAME "myNamespace"
    FILE_NS "${PROJECT_SOURCE_DIR}/myNS.xml"
    DEPENDS_TYPES "UA_TYPES"
    DEPENDS_NS "${open62541_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml"
    OUTPUT_PREFIX "myNS"
)

4. 排查构建命令细节

开启CMake详细输出,对比宏生成的Python命令与手动命令的差异:

  • 在CMakeLists.txt中添加set(CMAKE_VERBOSE_MAKEFILE ON)
  • 查看VS构建日志中的自定义命令执行记录,检查是否存在参数传递错误、Python环境差异或权限问题。

修正后的完整CMake示例

include(open62541Macros)

# 验证Conan工具路径
message(STATUS "CONAN_USER_OPEN62541_tools_dir: ${CONAN_USER_OPEN62541_tools_dir}")
set(open62541_TOOLS_DIR ${CONAN_USER_OPEN62541_tools_dir})
# 指向正确的标准节点集目录
set(open62541_NODESET_DIR "C:/.conan/29713a/1/src/deps/ua-nodeset")

# 生成自定义命名空间与数据类型
ua_generate_nodeset_and_datatypes(
    NAME "myNamespace"
    FILE_NS "${PROJECT_SOURCE_DIR}/myNS.xml"
    DEPENDS_TYPES "UA_TYPES"
    DEPENDS_NS "${open62541_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml"
    OUTPUT_PREFIX "myNS"
)

内容的提问来源于stack exchange,提问作者kkivi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:13:34