如何在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
相关产品推荐
相关产品推荐

