которая должна быть собрана динамически, а потом воспользоваться этой библиотекой через target_link_libraries(myApp myLibrary). Линкер пытается найти статическую библиотеку .lib/.a, а она ведь у меня собрана динамически в .dll/.so? Я что-то нашёл вот тут, но не могу понять как пользоваться результирующим экспортированным exported cmake-файлом.
Надо проверить какой таргет создается в директории myLibrary, может там чуть другое имя
Экспортировать если идете путем через add_subdirectory() ничего не надо
Линкуется к слову .lib, а не .dll на винде. Dll линкер искать не будет
Если делать так: add_library(myLibrary SHARED IMPORTED) set_property(TARGET myLibrary PROPERTY IMPORTED_LOCATION "/path/to/myLibrary.dll"), target_link_libraries(myexe myLibrary), то будет работать, но мне эту самую myLibrary ещё собрать нужно.
Лучше всего не гадать а дать полную информацию что находится в папке myLibrary
Условная библиотека из одного файла cpp и CMakeLists.txt следующего вида: cmake_minimum_required(VERSION 3.26) project(myLibrary) add_library(myLibrary SHARED mylibrary.cpp)
Тогда должно быть достаточно того что описано в вашем первом сообщении
Вот этот проект мне надо добавить через add_subdirectory(myLibrary).
Чего именно должно быть достаточно?
Вот это достаточно. Должен собирать myLibrary и потом с ней линковать без ошибок
Этого не происходит, потому что происходит ошибка поиска myLibrary.lib. Команда target_link_library() заставляет линкер искать собранную статически myLibrary.lib, но я ведь не собираю её статически.
это винда? lib файл и для длл там используется
Он не создаётся при сборке DLL
Ну значит у вас неверно cmakelists написан
cmake_minimum_required(VERSION 3.26) project(myLibrary) add_library(myLibrary SHARED mylibrary.cpp) Тут тяжело написать что-то неверно.
Тяжело но возможно. Экспорта как раз и не хватает
cmake_minimum_required(VERSION 3.26) project(myLibrary) add_library(myLibrary SHARED mylibrary.cpp) export(TARGETS myLibrary FILE myLibrary-exports.cmake) Допустим написал. Как теперь им воспользоваться?
Это не то совсем, cmake не создает библиотеку экспорта
Экспорт не нужен если через add_subdirectory()
Обсуждают сегодня