Задать вопрос
Ответы пользователя по тегу CMake
  • Как добавить файл конфигурации к библиотеке?

    @res2001
    Developer, ex-admin
    Обычно подобные вещи делаются не так.
    Для этого в cmake предусмотрена функция configure_file
    Смысл в том, что вы создаете шаблонный файл, содержащий ссылки на переменные cmake. configure_file обрабатывает этот шаблон, заменяет все ссылки значениями переменных и создает из них новый файл. Этот новый файл вы и используете в проекте. Т.е. реального файла (в вашем случае conf.h) в проекте не существует, он появляется только во время компиляции.
    Изменять значения переменных cmake пользователь может через параметры командной строки cmake с помощью ключа -D, например: cmake ... -DMY_VAL="New value".
    Подобную переменную внутри cmakelists.txt обычно декларируют через option, там же можно указать и описание переменной и значение по умолчанию.
    Примеры использования можете найти в любом более менее крупном проекте cmake на github.
    Ответ написан
    Комментировать
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Developer, ex-admin
    Конечно же в target_link_libraries, просто добавьте имя библиотеки в конце через пробел
    Но обычно используют find_package/find_library/pkg_check_modules для того, что бы предварительно определить установлена ли библиотека в системе. А в target_link_libraries добавляют переменные, которые инициализируются этими функциями.
    Смотрите: https://cmake.org/cmake/help/latest/genindex.html
    Ответ написан
    7 комментариев
  • Как скомпилировать библиотеку для 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 комментария