Ответы пользователя по тегу CMake
  • Как скомпилировать библиотеку для Qt из-под windows?

    @res2001
    Developer, ex-admin
    Вам не нужно компилировать библиотеку для Qt, вам просто нужно ее откомпилировать. Как она в дальнейшем будет использоваться (с Qt или без) роли не играет.

    Для mingw - проще всего использовать не чистый mingw, а msys2+mingw. В msys2 есть менеджер пакетов и в его репах уже много готового для использования софта. Думаю, что openbabel там то же есть. Просто ставите пакет openbabel так же как в линуксе и используете в своем проетке. Кстати, там же есть и qtcreator и Qt и много чего еще.

    Для msvc. Почему бы вам не использовать уже собранные бинарники библиотеки? Они, по моему, доступны для скачивания на официальном сайте.
    Если все же нужно собирать, то вот тут есть инстркция: openbabel.org/docs/dev/Installation/install.html#w...
    Рекомендую собирать в командной строке, а не в GUI. Используйте преднастроенную командную строку msvc (ссылки на нее есть в меню Пуск, после установки msvs). В состав msvs уже входит cmake. Если уж очень хочется GUI, то запускайте cmake GUI из той же командной строки msvc, тогда cmake сможет найти микрософтовский компилятор.
    Генератор cmake нужно выбирать тот, какой версии msvc у вас установлен в системе.
    Ответ написан
    Комментировать
  • Как правильно подключить библиотеку в С++?

    @res2001
    Developer, ex-admin
    1.Библиотека должна быть установлена в систему, что бы cmake смог ее найти. Лучше всего использовать штатный менеджер пакетов ОС. Кроме библиотеки нужно еще ставить и dev пакеты для нее (это заголовки). dev пакеты нужны как раз для возможности собрать свой (или не свой) код, использующий библиотеку. В некоторых дистрибутивах линукс может и не быть dev пакетов. В винде их нет то же, для MSVS есть свой менеджер пакетов - vcpkg.

    2.Вы должны заставить cmake найти библиотеку, это делается командами find_package или find_library.
    find_package - более расширенная версия, но для нее нужен модуль поиска. Для многих популярных библиотек cmake содержит уже готовые модули. Искать их можете тут по Find<Имя библиотеки>. Для MySQL клиента готового модуля нет. Можно загуглить, я думаю, будет не трудно найти готовый модуль и использовать его в своем проекте.
    find_library - просто ищет библиотеку по стандартным путям. Но для сборки обычно этого мало, т.к. нужны еще заголовочные файлы и если пакетный менеджер ставит их в специфические пути, то они будут не доступны. Поэтому лучше использовать find_package - он ищет все.

    3.Добавить путь к заголовочным файлам библиотеки к проекту с помощью команды: target_include_directories
    Переменная, содержащая путь должна быть определена в п.2 (либо вы задаете путь вручную)

    4.Добавить библиотеку в список линковки с помощью команды: target_link_libraries
    Аналогично нужно использовать переменные, которые будут определены в п.2.

    В этом процессе есть разные нюансы, которые могут влиять на используемые средства, например что делать если библиотеки нет в репозитории ОС или она распространяется только в виде исходников.

    В итоге все манипуляции приводят к тому, что компилятору задаются опции -I (для включения каталога с заголовочными файлами библиотеки), -l и возможно -L - для включения библиотеки в список линковки.

    Все это можно сделать и руками задав для компилятора нужные опции с помощью add_compile_options и add_link_options - но это приведет к тому, что скорее всего на другом компьютере или в другой ОС вам придется править cmakelist.txt для сборки.
    Ответ написан
    3 комментария