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

Posted

技术标签:

【中文标题】可以在目录 CMake 中使用整个项目的导入【英文标题】:Make it possible to use imports of the whole project in the catalog CMake 【发布时间】:2021-06-25 11:32:11 【问题描述】:

我想用imgui做一个小应用

为了运行测试窗口,我使用了 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)

【问题讨论】:

无关:不要使用“裸”link_librariesinclude_directories。始终使用target_* 表单来明确哪个目标看到什么。 【参考方案1】:

您需要告诉 CMake 将 imgui-glimgui::imgui 目标链接,以便它也知道在哪里可以找到 imgui.h:

target_link_libraries(imgui-gl PUBLIC imgui::imgui)

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

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

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

【讨论】:

谢谢!你帮了我很多!

以上是关于可以在目录 CMake 中使用整个项目的导入的主要内容,如果未能解决你的问题,请参考以下文章

clion中cmake导入的是哪个目录

如何避免 cmake 子项目中的名称冲突?

使用 CMake 从没有相对路径的子目录导入

(CMake杂记) —— 利用 CMake 创建项目的分组

(CMake杂记) —— 利用 CMake 创建项目的分组

(CMake杂记) —— 利用 CMake 创建项目的分组