6

对于 Macos,我想链接到一些框架。在 Windows 中,我想链接到某个库。

比如OpenGL框架,如何用cmake来表达这个需求?

4

4 回答 4

8

您可以尝试以下代码:

target_link_libraries(<target name>
    "-framework AVFoundation"
    "-framework CoreGraphics"
    "-framework CoreMotion"
    "-framework Foundation"
    "-framework MediaPlayer"
    "-framework OpenGLES"
    "-framework QuartzCore"
    "-framework UIKit"
    )
于 2015-02-04T04:04:42.560 回答
2

要告诉 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()
于 2014-12-21T04:05:02.433 回答
1

您可以尝试以下宏代码:

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

您可以在此处找到此示例代码

于 2014-12-22T09:02:00.550 回答
1

对于自定义框架

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})
于 2021-09-22T00:20:53.747 回答