2010-04-08 3 views
10

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

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

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

Спасибо! Mike

ответ

9

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

6

Просто используйте 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() 
Смежные вопросы