Осваиваю cmake и столкнулся вот с какой проблемой: У меня есть три папки с написанными мною статическими библиотеками. Назовем их a, b и c. Внутри лежат CMakeLists.txt с одноимённым проектами. Особенность в том, что библиотека b включает в себя a, а c включает b. Включают следующим образом:
project(c)
find_library(LIB_B b PATHS ../b)
add_library(c STATIC some_file.cpp)
target_link_libraries(c ${LIB_B})
Проблема в том, что линковщик при линковке c ругается на то, что не находит тела функций, описанные в a. Вопрос, что может быть не так? И как этот вопрос проконтролировать? Просьба не отсылать меня в гугл, поверьте я в нем просидел два дня подряд. Видимо, я просто не знаю что искать. Заранее благодарю за ответы.
Раз у Вас свои библиотеки, то вероятно, что у Вас и в корне CMakeFile.txt должен лежать, в котором будут add_subdirectory
для каждой библиотеки. Выстраиваем их в нужном порядке и в target_link_libraries
просто используем имена:
target_link_libraries(c b)
find_library
ищет файлы, а не выстраивает зависимости. Т.е. эта функция используется для уже собранных библиотек, а не для внутрипроектных зависимостей.
Да, кстати, учтите, что статические библиотеки так не объединяются. Т.е. 2 статических библиотеки в одну большую не будут собираться, для этого нет средств в CMake, только компиляторо-зависимые. Это просто поможет выстроить граф зависимостей.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу что бы JDK11 был выбран, по умолчанию, вручнуюВвожу команду: