CMake项目集成ImGui时imgui_impl_glfw.cpp找不到GLFW/glfw3.h如何解决
问题原因
CMake的目标属性是相互独立的,你主项目目标aprum链接了glfw导入目标,会自动继承GLFW的头文件搜索路径,所以你项目里其他文件可以正常引入GLFW/glfw3.h。但你单独创建了静态库目标ImGui,这个目标没有关联GLFW的头文件搜索路径,所以编译ImGui的实现文件时找不到GLFW头文件。
解决方法
你可以任选以下任意一种方案修复问题:
方案1:给ImGui库关联GLFW和GLEW的依赖
直接在你原来的ImGui配置段,添加链接GLFW、GLEW导入目标的逻辑,导入目标会自动传递头文件搜索路径:#imgui set(IMGUI_PATH "src/engine/vendor/imgui") file(GLOB IMGUI_SOURCES ${IMGUI_PATH}/*.cpp) add_library("ImGui" STATIC ${IMGUI_SOURCES}) target_include_directories("ImGui" PUBLIC ${IMGUI_PATH}) # 新增以下两行,给ImGui目标添加GLFW和GLEW依赖 target_link_libraries(ImGui PUBLIC glfw) target_link_libraries(ImGui PUBLIC GLEW::GLEW) target_link_libraries(aprum ImGui)注意确认你已经把
imgui_impl_glfw.cpp、imgui_impl_opengl3.cpp这两个平台/渲染API实现文件放到了${IMGUI_PATH}目录下,不然运行时会有未定义符号报错。方案2:把ImGui源码直接合并到主目标
不需要单独创建ImGui静态库,直接把ImGui的所有源文件加到主目标aprum的源文件列表里,即可共享主目标的所有头文件搜索路径:set(IMGUI_PATH "src/engine/vendor/imgui") file(GLOB IMGUI_SOURCES ${IMGUI_PATH}/*.cpp) # 把ImGui源文件加到add_executable的源文件列表即可,不需要单独建库 add_executable(aprum 你原来的所有源文件 ${IMGUI_SOURCES})
额外优化建议
你原CMake里的target_link_libraries(aprum ${GLFW_STATIC_LIBRARIES})属于冗余配置,find_package(glfw3)生成的导入目标glfw已经自带了所有编译、链接配置,直接删去这行即可。
内容的提问来源于stack exchange,提问作者Luc Drenth
相关产品推荐
相关产品推荐

