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

Что лучший метод должен включать предварительно созданную библиотеку в 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

12
задан Mike 8 April 2010 в 16:45
поделиться

2 ответа

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

10
ответ дан 2 December 2019 в 18:52
поделиться

Просто используйте 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()
9
ответ дан 2 December 2019 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: