对于 Macos,我想链接到一些框架。在 Windows 中,我想链接到某个库。
比如OpenGL框架,如何用cmake来表达这个需求?
您可以尝试以下代码:
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})