Как использовать фреймворк с помощью Cmake?

Для Macos я бы хотел добавить ссылку на некоторые рамки. В окнах я хотел бы сделать ссылку на какую-то библиотеку.

Например, OpenGL Framework, как выразить это требование с помощью cmake?

4 ответа

Вы можете попробовать следующий код:

target_link_libraries(<target name>
    "-framework AVFoundation"
    "-framework CoreGraphics"
    "-framework CoreMotion"
    "-framework Foundation"
    "-framework MediaPlayer"
    "-framework OpenGLES"
    "-framework QuartzCore"
    "-framework UIKit"
    )

Чтобы сообщить CMake, что вы хотите связать с OpenGL, добавьте следующее в ваш CMakeLists.txt:

find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
target_link_libraries(<your program name> ${OPENGL_LIBRARIES})

find_package будет искать OpenGL и сообщать остальной части скрипта, где находится OpenGL, устанавливая некоторые переменные OPENGL*. include_directories говорит вашему компилятору, где найти заголовки OpenGL. target_link_libraries указывает CMake на ссылку в OpenGL.

Следующий код будет выполнять различные действия в зависимости от операционной системы:

if(WIN32)
    #Windows specific code
elseif(APPLE)
    #OSX specific code
endif()

Вы можете попробовать следующий код макроса:

macro(ADD_OSX_FRAMEWORK fwname target)
    find_library(FRAMEWORK_${fwname}
    NAMES ${fwname}
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library
    PATH_SUFFIXES Frameworks
    NO_DEFAULT_PATH)
    if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND)
        MESSAGE(ERROR ": Framework ${fwname} not found")
    else()
        TARGET_LINK_LIBRARIES(${target} PUBLIC "${FRAMEWORK_${fwname}}/${fwname}")
        MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}")
    endif()
endmacro(ADD_OSX_FRAMEWORK)

пример

ADD_OSX_FRAMEWORK(Foundation ${YOUR_TARGET}) # Add the foundation OSX Framework

Вы можете найти этот пример кода здесь

Для нестандартной структуры

cmake version 3.20.1

https://github.com/Sunbreak/cli-breakpad.trial/blob/master/CMakeLists.txt#L10-L12

      if(APPLE)
    find_library(BREAKPAD_CLIENT Breakpad "${CMAKE_CURRENT_SOURCE_DIR}/breakpad/mac/")
    target_link_libraries(cli-breakpad PRIVATE ${BREAKPAD_CLIENT})
Другие вопросы по тегам