Как связать предварительно собранную разделяемую библиотеку с исполняемым файлом (CMake)? - PullRequest
0 голосов
/ 21 апреля 2019

Я не знаю много о 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, и на этот раз я не получаю ошибок.

Почему я не получаю ошибок со статическими библиотеками, а я получаю эту ошибку с динамическими?Есть ли другой способ связать динамическую библиотеку с исполняемой целью?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...