【问题标题】:Build open62541 library as external library with CMake使用 CMake 将 open62541 库构建为外部库
【发布时间】:2019-06-09 03:32:41
【问题描述】:

我想在 Visual Studio 中使用 CMake 将 open62541 库包含到我现有的 C++ 项目中。 open62541 本身使用 CMake 作为构建工具。项目结构:

MyOPC
│   CMakeLists.txt
│   MyOPC.cpp
│   MyOPC.h
├───.vs
└───open62541
    │   CMakeLists.txt
    ├───arch
    │   │    CMakeLists.txt
    ├───deps
    ├───doc
    ├───examples
    ├───include
    ├───plugins
    ├───src
    ├───tests
    └───tools

我想与我的项目一起构建 open62541,以便生成 open62541.h 文件。如何使用 CMake 来完成?

【问题讨论】:

    标签: c++ c cmake visual-studio-2017 open62541


    【解决方案1】:

    感谢@Stefan Profanter 让我朝着正确的方向前进。这是当前工作的 CMakeLists.txt:

    # CMakeList.txt : Top-level CMake project file, do global configuration
    # and include sub-projects here.
    #
    cmake_minimum_required (VERSION 3.8)
    
    project ("MyOPC")
    
    add_executable (${PROJECT_NAME} "MyOPC.cpp" "MyOPC.h")
    
    
    # -----------------------------------
    # open62541 specific settings - BEGIN
    # -----------------------------------
    set(UA_ENABLE_AMALGAMATION ON CACHE BOOL "" FORCE)
    set(UA_LOGLEVEL 300)
    add_subdirectory ("open62541")
    
    set_source_files_properties("${PROJECT_BINARY_DIR}/open62541/open62541.c" PROPERTIES GENERATED TRUE)
    set(${PROJECT_NAME}_SRCS ${${PROJECT_NAME}_SRCS} "${PROJECT_BINARY_DIR}/open62541/open62541.c")
    include_directories("${PROJECT_BINARY_DIR}/open62541/")
    # -----------------------------------
    # open62541 specific settings - END
    # -----------------------------------
    
    add_dependencies(${PROJECT_NAME} open62541 open62541-amalgamation-source open62541-amalgamation-header) 
    
    target_link_libraries(${PROJECT_NAME} open62541)
    

    头文件MyOPC.h中的引用:

    #include "open62541.h"
    

    【讨论】:

      【解决方案2】:

      您可以简单地将 open62541 的子目录添加到您的主 CMake 中,然后在此之前设置相应的 CMake 选项。然后还将 open62541 目标添加到您自己的目标中并添加合并的源文件。

      例如启用合并:

      set(UA_ENABLE_AMALGAMATION ON CACHE BOOL "" FORCE)
      set(UA_LOGLEVEL 300)
      add_subdirectory(open62541)
      
      add_dependencies(${PROJECT_NAME} open62541 open62541-amalgamation-source open62541-amalgamation-header)  
      set (${PROJECT_NAME}_SRCS ${${PROJECT_NAME}_SRCS} "${PROJECT_BINARY_DIR}/open62541/open62541.c")
      

      确保将 _SRCS 添加到您自己的目标源中。

      这里做了类似的事情: https://github.com/Pro/open62541-arduino

      【讨论】:

        猜你喜欢
        • 2022-01-07
        • 1970-01-01
        • 2016-11-02
        • 2021-12-25
        • 1970-01-01
        • 2021-11-27
        • 2021-09-30
        • 2023-04-07
        相关资源
        最近更新 更多