You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS的CMake项目中正确链接静态库与多框架?

macOS下CMake同时链接raylib静态库和系统框架的解决方案

你之前的误解是错误的:CMake完全支持多次调用target_link_libraries,也可以在同一个调用里同时指定静态库和系统框架。以下是几种可行的修改方案:

方案1:同一次调用完成所有链接

直接在target_link_libraries中同时添加静态库路径和系统框架:

cmake_minimum_required(VERSION 3.10)
project(RaylibHW)

# 添加可执行文件
add_executable(rlhw my_app.c)

if(APPLE)
    # 替换${CMAKE_CURRENT_SOURCE_DIR}/libraylib.a为静态库实际路径(同目录则无需修改)
    target_link_libraries(rlhw PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/libraylib.a
        "-framework CoreVideo"
        "-framework IOKit"
        "-framework Cocoa"
        "-framework GLUT"
        "-framework OpenGL"
    )
endif()

方案2:分多次调用链接

先链接静态库,再单独链接系统框架,效果和方案1完全一致:

cmake_minimum_required(VERSION 3.10)
project(RaylibHW)

# 添加可执行文件
add_executable(rlhw my_app.c)

if(APPLE)
    # 先链接静态库
    target_link_libraries(rlhw PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libraylib.a)
    # 再链接系统框架
    target_link_libraries(rlhw PRIVATE
        "-framework CoreVideo"
        "-framework IOKit"
        "-framework Cocoa"
        "-framework GLUT"
        "-framework OpenGL"
    )
endif()

可选:规范导入外部静态库

如果你想更规范地管理外部静态库,可以用IMPORTED关键字导入,再进行链接:

cmake_minimum_required(VERSION 3.10)
project(RaylibHW)

# 添加可执行文件
add_executable(rlhw my_app.c)

if(APPLE)
    # 导入外部静态库
    add_library(libraylib STATIC IMPORTED)
    set_target_properties(libraylib PROPERTIES 
        IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libraylib.a
    )
    # 同时链接导入的库和系统框架
    target_link_libraries(rlhw PRIVATE
        libraylib
        "-framework CoreVideo"
        "-framework IOKit"
        "-framework Cocoa"
        "-framework GLUT"
        "-framework OpenGL"
    )
endif()

内容的提问来源于stack exchange,提问作者petermayotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:06:30