Включение библиотек в проект cmake

148
07 мая 2019, 08:40

Осваиваю 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. Вопрос, что может быть не так? И как этот вопрос проконтролировать? Просьба не отсылать меня в гугл, поверьте я в нем просидел два дня подряд. Видимо, я просто не знаю что искать. Заранее благодарю за ответы.

Answer 1

Раз у Вас свои библиотеки, то вероятно, что у Вас и в корне CMakeFile.txt должен лежать, в котором будут add_subdirectory для каждой библиотеки. Выстраиваем их в нужном порядке и в target_link_libraries просто используем имена:

target_link_libraries(c b)

find_library ищет файлы, а не выстраивает зависимости. Т.е. эта функция используется для уже собранных библиотек, а не для внутрипроектных зависимостей.

Да, кстати, учтите, что статические библиотеки так не объединяются. Т.е. 2 статических библиотеки в одну большую не будут собираться, для этого нет средств в CMake, только компиляторо-зависимые. Это просто поможет выстроить граф зависимостей.

READ ALSO
Ошибка при работе с вектором std::bad_alloc

Ошибка при работе с вектором std::bad_alloc

Из-за чего такая ошибка? И как её исправить?

138
Почему возникает ошибки при установки java-alternatives?

Почему возникает ошибки при установки java-alternatives?

Хочу что бы JDK11 был выбран, по умолчанию, вручнуюВвожу команду:

150
AudioManager.OnAudioFocusChangeListener [закрыт]

AudioManager.OnAudioFocusChangeListener [закрыт]

Встретил такой Андроид код:

158