Как правильно создать и использовать библиотеку c++ в CMake?

У меня есть несколько проектов:

  1. MI.Core - библиотека, которую я написал.
  2. MI.CoreMain - библиотека + main.cpp
  3. MI.Test - библиотека + GTest
  4. MI.Bench - библиотека + GBenchmark

Я написал CMake, который создает решение со всеми четырьмя проектами.

cmake_minimum_required(VERSION 3.16.0)
project (MI)

set(SRC_LIST
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Base/MI.BaseExport.h
    #...
)

set(UNITTEST_LIST
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Base/MI.DoubleEq_unittest.cpp
    #...
)

set(MAIN_FILE 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/MI.Main.cpp
)

# ===== MI.Core =====
add_library(MI.Core SHARED ${SRC_LIST})
target_include_directories(MI.Core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
target_compile_definitions(MI.Core PRIVATE BASE_IMPLEMENTATION)

# =====  MI.CoreMain =====
add_executable(MI.CoreMain ${MAIN_FILE} ${NATVIS_LIST})

target_link_libraries(MI.CoreMain MI.Core)
target_include_directories(MI.CoreMain PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)

# ===== MI.Test =====
# ...

# ===== MI.Bench =====
# ...

Теперь я создаю отдельный проект MI.UI, который должен использовать библиотеку MI.Core.

cmake_minimum_required(VERSION 3.23.0)
project(MI.UI VERSION 1.0.0 LANGUAGES CXX)

# ===== MI.Core =====
find_library(MI_CORE_LIBRARY_RELEASE MI.Core C:/Work/MI/build/Release)
find_library(MI_CORE_LIBRARY_DEBUG MI.Core C:/Work/MI/build/Debug)

set(MI_LIBRARY optimized ${MI_CORE_LIBRARY_RELEASE} debug ${MI_CORE_LIBRARY_DEBUG})
set(MI_INCLUDE_DIR C:/Work/MI/src)

target_include_directories(MI.UI PRIVATE ${MI_INCLUDE_DIR})
target_link_libraries(MI.UI PRIVATE ${MI_LIBRARY})

Но при запуске MI.UI.exe получаю предупреждение (система не обнаружила MI.Core.dll). И я не понимаю, как правильно решить эту проблему.

Мне нужно просто каждый раз копировать dll в папку с MI.UI.exe? Или есть более правильное решение?


Ответы (0 шт):