可以在目录 CMake 中使用整个项目的导入

Make it possible to use imports of the whole project in the catalog CMake

我想用imgui做一个小应用

为了运行测试window我用的是opengl glfw后端

问题是我项目的lib/imgui_gl目录下的文件无法访问项目根目录下的文件可以访问的头文件

这是我的 CmakeList 文件的样子

cmake_minimum_required(VERSION 3.17)
project(boardserver)

set(CMAKE_CXX_STANDARD 20)
set(LIB_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/lib) # Lib folder


add_executable(boardserver main.cpp)

find_package(imgui CONFIG REQUIRED)
find_package(GLEW REQUIRED)
find_package(OpenGL REQUIRED)
find_package(SDL2 REQUIRED)
find_package(glfw3 REQUIRED)

## Imgui opengl glfw backend lib
set(imgui-gl_Includes "${LIB_FOLDER}/imgui_gl/")
add_library(imgui-gl STATIC
        ${LIB_FOLDER}/imgui_gl/imgui_impl_glfw.cpp ${LIB_FOLDER}/imgui_gl/imgui_impl_opengl3.cpp )


include_directories(${imgui-gl_Includes})
target_link_libraries(boardserver PRIVATE imgui::imgui GLEW::GLEW OpenGL::GL SDL2::SDL2 glfw imgui-gl)

您需要使用 imgui::imgui 目标告诉 CMake link imgui-gl,这样它也知道在哪里可以找到 imgui.h:

target_link_libraries(imgui-gl PUBLIC imgui::imgui)

作为现代 CMake 最佳实践,您可能还希望将其包含目录作为界面的一部分:

target_include_directories(imgui-gl PUBLIC "${LIB_FOLDER}/imgui_gl")

这些语句共同确保 link 到 imgui-gl 的任何目标都能看到正确的 headers 并且知道要 link 到什么。