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