Добавление скомпилированных библиотек и включение файлов в проект CMake?

каков наилучший метод включения встроенной библиотеки в проект cmake? Я хочу включить FreeType в проект, над которым я работаю, и структура файла выглядит так:

  • построить
    • в macOS
      • сделать/
      • XCode/
    • Windows
      • VisualStudio/
  • источник
    • libs
      • в macOS
        • libfreetype
      • Windows
        • программа FreeType.dll файлы
    • включает в себя
      • freetype/ (различные заголовочные файлы, которые автоматически включаются ftbuild.h)
      • ftbuild.h (это то, что включено в код из моего понимания.)
    • мой проект
      • main.cpp
      • фу.cpp
      • фу.h

библиотека уже скомпилирована. MyProject-это имя текущего проекта.

спасибо! Майк!--1-->

2 ответов


в последних версиях уже есть модуль для поиска FreeType. Вот что я делал в прошлом:--2-->

INCLUDE(FindFreetype)
IF(NOT FREETYPE_FOUND)
  FIND_LIBRARY(FREETYPE_LIBRARIES NAMES libfreetype freetype.dll PATHS "./libs/MacOS" "./libs/Windows" DOC "Freetype library")
  FIND_PATH(FREETYPE_INCLUDE_DIRS ftbuild.h "./includes" DOC "Freetype includes")
ENDIF(NOT FREETYPE_FOUND)
INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(MyProject ${FREETYPE_LIBRARIES})

вам нужно будет изменить пути относительно ваших CMakeLists.формат txt.

этот фрагмент сначала вызывает модуль FindFreetype для проверки стандартных системных расположений. Если ему не удается найти библиотеку там, то это возвращается к проверке каталогов относительно ваших CMakeLists.txt скрипт. Если это все еще терпит неудачу, вы все еще можно установить или переопределить местоположения с помощью обычного пользовательского интерфейса CMake. В любом случае, он пытается добавить что-то в список включений и библиотек для ссылки.


просто используйте target_link_libraries с полным путем к предварительно построенному lib.

Так, что-то вроде:

# In the file Source/MyProject/CMakeLists.txt
add_executable(my_exe main.cpp foo.cpp foo.h)
if(WIN32)
  target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/Windows/freetype.lib)
endif()
if(APPLE)
  target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/MacOS/libfreetype.a)
endif()