Добавление скомпилированных библиотек и включаемых файлов в проект CMake? - PullRequest
11 голосов
/ 08 апреля 2010

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

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

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

Спасибо! Mike

Ответы [ 2 ]

10 голосов
/ 09 апреля 2010

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

9 голосов
/ 09 апреля 2010

Просто используйте 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...