Создайте библиотеку open62541 как внешнюю библиотеку с помощью CMake

Я хотел бы включить библиотеку open62541 в свой существующий проект C++ в Visual Studio с помощью CMake. Сам 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?


person user1646245    schedule 15.01.2019    source источник


Ответы (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

person Stefan Profanter    schedule 15.01.2019

Спасибо @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"
person user1646245    schedule 16.01.2019