Сборка библиотеки 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?
2 ответа
Спасибо @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"
Вы можете просто добавить подкаталог 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