Я не знаю много о CMake и о процессе сборки в целом.Я пытаюсь связать предварительно созданную общую библиотеку (zlibd.dll) с исполняемой целью (я в Windows).Для этого я создал новую импортированную цель, установил ее свойство IMPORTED_LOCATION и затем связал эту цель с моей исполняемой ... но когда я пытаюсь собрать, я получаю ошибку make.
Структура проектаэто действительно просто, просто папка с этими файлами: CMakeLists.txt, main.cpp, zlibd.dll (и папка сборки).
Это содержимое CMakeLists.txt:
cmake_minimum_required(VERSION 3.14)
project(hey)
add_library(zlib SHARED IMPORTED GLOBAL)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/zlibd.dll")
add_executable(hello main.cpp)
target_link_libraries(hello zlib)
И это ошибка, которую я получаю, когда пытаюсь построить проект:
mingw32-make.exe[2]: *** No rule to make target 'zlib-NOTFOUND', needed by 'hello.exe'. Stop.
CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/hello.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/hello.dir/all] Error 2
Makefile:82: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 2
Этот подход не дает мне ошибок, если у меня есть статическая библиотека вместо динамической, и она успешно собирается.Я пробовал и с другими общими библиотеками, и ошибка та же.Более того, я попытался изменить ключевое слово SHARED на OBJECT в команде add_library, и на этот раз я не получаю ошибок.
Почему я не получаю ошибок со статическими библиотеками, а я получаю эту ошибку с динамическими?Есть ли другой способ связать динамическую библиотеку с исполняемой целью?