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

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

  • Построить
    • MacOS
      • Убедитесь, /
      • XCode/
    • Окна
      • VisualStudio/
  • Источник
    • ЛИЭС
      • MacOS
        • libfreetype
      • Окна
        • freetype.dll
    • включает в себя
      • freetype/(Различные файлы заголовков, которые автоматически включаются ftbuild.h)
      • ftbuild.h(это то, что включено в код из моего понимания.)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

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

Спасибо! Mike

Ответ 1

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

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 script. Если это все еще не удается, вы можете установить или переопределить местоположения с помощью обычного интерфейса CMake. В любом случае он пытается добавить что-то в список включений и библиотек для ссылки.

Ответ 2

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

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

# 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()