MinGW+CLion环境下如何通过CMakeLists.txt正确链接GLFW、GLEW库?
解决MinGW+CLion环境下CMake找不到GLFW库的问题
我来帮你搞定这个CMake的难题,你遇到的cannot find -lglfw3错误,核心原因是你的CMakeLists.txt没有告诉CMake去项目根目录的libraries文件夹里搜索GLFW(以及GLEW)库——CMake默认只会查找系统预设的库路径(比如MinGW自带的lib目录),自然找不到你手动放置的库文件。
下面是修改后的完整CMakeLists.txt,我会逐段解释改动的逻辑:
cmake_minimum_required(VERSION 3.17.3) project(imguiTask) set(CMAKE_CXX_STANDARD 17) # 定义库文件和头文件的根路径(指向你项目里的libraries文件夹) set(LIBRARY_ROOT ${PROJECT_SOURCE_DIR}/libraries) # GLEW的编译选项保留,没问题 add_compile_options(-DGLEW_NO_GLU) # 添加可执行文件,源文件列表保持不变 add_executable(${PROJECT_NAME} src/main.cpp src/imgui.cpp src/imgui_draw.cpp src/imgui_widgets.cpp ) # 指定头文件搜索路径:包含你自己的includes,以及库自带的头文件目录 target_include_directories(${PROJECT_NAME} PUBLIC includes ${LIBRARY_ROOT}/include # GLFW和GLEW的头文件应该在这里 ) # 指定库文件的搜索路径:告诉CMake去libraries下的lib文件夹找库 target_link_directories(${PROJECT_NAME} PUBLIC ${LIBRARY_ROOT}/lib ) # 链接所需的库:GLFW、GLEW,还要加上MinGW下OpenGL的系统库opengl32 target_link_libraries(${PROJECT_NAME} glfw3 glew32 opengl32 )
关键改动说明:
- 定义库路径变量:
LIBRARY_ROOT明确指向你项目根目录的libraries文件夹,后续所有路径都基于这个变量,避免硬编码。 - 扩展头文件搜索路径:添加
${LIBRARY_ROOT}/include,确保CMake能找到GLFW的glfw3.h和GLEW的glew.h。 - 添加库文件搜索路径:
target_link_directories告诉CMake去libraries/lib里找静态库/动态库,这是解决你链接错误的核心步骤。 - 完善链接库列表:除了GLFW和GLEW,还要链接MinGW下的
opengl32系统库——GLFW依赖OpenGL核心库,不链接的话后续可能还会出现新的错误。
额外注意事项:
- 请确认你的
libraries文件夹结构是否符合预期,应该是这样的(如果你的结构不同,调整路径即可):项目根目录/ libraries/ include/ GL/ glew.h GLFW/ glfw3.h lib/ libglfw3.a # MinGW编译的GLFW静态库 libglew32.a # MinGW编译的GLEW静态库 - 确保库文件的命名正确:MinGW下的静态库通常以
lib开头、.a结尾,比如libglfw3.a,CMake用glfw3作为链接目标时,会自动匹配这个命名规则;如果你的库是glfw3.lib(MSVC风格),可能需要调整链接目标为glfw3.lib或者重新编译MinGW版本的库。 - 你原来的
add_library(libraries STATIC IMPORTED)代码没有配置导入库的具体路径,相当于无效代码,所以我直接移除了——用target_link_directories的方式更简洁直观。
内容的提问来源于stack exchange,提问作者Fox1942
相关产品推荐
相关产品推荐

