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

如何在VSCode中用CMake引入并链接.dylib文件(GLFW示例)

手动引入GLFW动态库的CMake配置问题

项目结构

main.cpp
CMakeLists.txt
build
dependencies
    - glfw 
        - lib
            - libglfw.3.dylib
        - include
            - glfw3.h
            - glfw3native.h

库文件来源

从GLFW官网下载macOS预编译二进制包,提取出头文件和.dylib文件后移入上述项目目录。

当前CMakeLists.txt内容

cmake_minimum_required(VERSION 3.27)

project(demo)

add_executable(demo main.cpp)

include_directories(${CMAKE_SOURCE_DIR}/dependencies/glfw/include)
link_directories(${CMAKE_SOURCE_DIR}/dependencies/glfw/lib)

if (APPLE) 
    target_link_libraries(demo PRIVATE
    "-framework OpenGL"
)
endif()

add_library(glfw SHARED IMPORTED)
target_sources(glfw INTERFACE ${CMAKE_SOURCE_DIR}/dependencies/glfw/lib/libglfw.3.dylib)
target_link_libraries(demo INTERFACE glfw)

# set_target_properties(glfw PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/dependencies/glfw/lib/libglfw.3.dylib)

问题现象

在VSCode中执行CMake: Build时,编译器报告GLFW相关的未定义符号错误,明确是库链接方式有误,但不清楚具体问题出在哪里。

我对CMake相关指令的理解

  • include_directories:告知CMake头文件位置,已验证可用——main.cpp中能正常#include <glfw3.h>,且IntelliSense可以正常提示函数和类型。
  • link_directories:告知CMake库文件的搜索路径,仅指定路径,不执行实际链接操作。
  • add_library(<name> <type> IMPORTED):用于引用项目外部的库文件,创建一个名为<name>的CMake目标,使其在项目中可用(本例中库在项目目录内,我认为只需提供二进制文件的完整路径即可)。
  • target_sources:指定构建目标所需的源文件,但GLFW是预编译二进制库,我不确定是否需要对它使用该指令,怀疑这里操作有误。我也曾尝试过使用注释掉的set_target_properties方式,但仍出现未定义符号错误。
  • target_link_libraries:将GLFW目标链接到主项目目标,我认为这会告知链接器去链接GLFW目标,且已经指定了搜索路径和目标文件,理论上应该能正常工作。

之前可行的vcpkg配置

set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake)

set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/vcpkg/packages/glfw3_arm64-osx/share/glfw3 ${CMAKE_PREFIX_PATH})

find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(demo PRIVATE glfw)
target_include_directories(demo PRIVATE ${CMAKE_SOURCE_DIR}/vcpkg/packages/glfw3_arm64-osx/include/GLFW)

该配置可以正常运行,但它链接的是静态库libglfw3.a,会增大可执行文件体积,我希望学习如何在运行时正确链接动态库。

我的疑问

我非常希望学好CMake,不想被其复杂性难住,请问我的方向是否正确?

内容的提问来源于stack exchange,提问作者michael.yql

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:49:54