Как разработать разделяемую библиотеку в KDevelop?

Я хочу разработать общую библиотеку в KDevelop. Но я не вижу шаблона для библиотеки.

Думаю, мне нужно создать проект из шаблона С++ и отредактировать файлы CMake в обоих проектах. К сожалению, у меня нет опыта разработки библиотек с помощью CMake, также я хочу хорошую интеграцию с KDevelop - автоматическую сборку библиотеки, когда я создаю/запускаю проект, использующий эту библиотеку.


person kravemir    schedule 17.11.2011    source источник


Ответы (1)


Для создания библиотеки используйте add_library. команда:

add_library(<name> [STATIC | SHARED | MODULE]
          [EXCLUDE_FROM_ALL]
          source1 source2 ... sourceN)

Например:

add_library(mylib SHARED
    a.h
    a.cpp
    b.h
    b.cpp)

Создал бы общую библиотеку из четырех перечисленных файлов.

Если ваша программа (созданная с помощью add_executable ) использует библиотеку, когда вы указываете ссылку с помощью target_link_libraries, CMake добавит зависимость, так что если вы измените a.cpp, библиотека mylib будет перестроена, а ваше приложение будет повторно связано.

Например

add_executable(myprog
    main.cpp)

target_link_libraries(myprog
    mylib)

Изменить:

Если ваша библиотека и проект находятся в разных папках, вы можете использовать add_subdirectory.

Создайте CMakeList.txt в каждом каталоге, в папке библиотеки используйте add_library, в приложении используйте add_program и target_link_libraries.

В родительской папке используйте add_subdirectory, сначала добавьте папку библиотеки, затем папку программы. Это сделает библиотеку доступной для приложения. Затем запустите cmake для родительского CMakeList.

person Silas Parker    schedule 17.11.2011
comment
Но библиотека и приложение это разные проекты и находятся в разных папках. Итак, как я могу сообщить ProjectApplication о ProjectLibrary? - person kravemir; 17.11.2011
comment
@MiroK Я расширил свой ответ, включив в него add_subdirectory использование. - person Silas Parker; 18.11.2011
comment
Насколько я знаю, нет необходимости включать заголовки в add_library(). Это правда? - person arrowd; 18.11.2011
comment
Хотя это и не обязательно для компиляции, лучше включить их, чтобы изменение заголовка вызвало перекомпиляцию. Make и другие инструменты сборки обычно проверяют только время последнего изменения, поэтому тот факт, что они включены в другие файлы, не приведет к тому, что изменения будут приняты и не вызовут повторную компиляцию. - person Silas Parker; 18.11.2011
comment
@kravemir Если этот пост ответил на ваш вопрос, отметьте его так. - person arrowd; 20.09.2016