Как правильно создать и использовать библиотеку c++ в CMake?
У меня есть несколько проектов:
- MI.Core - библиотека, которую я написал.
- MI.CoreMain - библиотека + main.cpp
- MI.Test - библиотека + GTest
- 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? Или есть более правильное решение?