优秀的即时渲染C++ GUI开发框架imgui(https://github.com/ocornut/imgui)在很多场合能发挥非常棒的作用。但是由于官方源码仓库一直没有提供基于cmake构建和创建新项目的工具,这里提供一个基于cmake构建基于imgui新项目的模板源码,方便搭建工程。
项目结构
imgui_cmake_starter
- imgui
- src
|- win
- main.cpp
|- unix
- main.cpp
- CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(imgui_cmake_starter)
# add header path
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/imgui-1.83
${CMAKE_CURRENT_SOURCE_DIR}/imgui-1.83/backends
)
if (APPLE)
# for <GLFW/glfw3.h>
include_directories(
/usr/local/include
/opt/local/include
/opt/homebrew/include
)
endif()
# set common source
file(GLOB SRC
./imgui-1.83/*.h
./imgui-1.83/*.cpp
)
# set specific source and other option for platform
if (WIN32)
file (GLOB PLATFORM_SRC
./imgui-1.83/backends/imgui_impl_win32.*
./imgui-1.83/backends/imgui_impl_dx12.*
./src/win/main.cpp
)
elseif (UNIX)
# support both mac and linux
add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GL3W)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/imgui-1.83/examples/libs/gl3w # for GL/gl3w.h
)
file (GLOB PLATFORM_SRC
./imgui-1.83/examples/libs/gl3w/GL/gl3w.*
./imgui-1.83/backends/imgui_impl_glfw.*
./imgui-1.83/backends/imgui_impl_opengl3.*
./src/unix/main.cpp
)
endif()
# add link path
if (APPLE)
link_directories(
/usr/local/lib
/opt/local/lib
/opt/homebrew/lib
)
endif()
# generate binary
add_executable(${PROJECT_NAME} ${SRC} ${PLATFORM_SRC})
# link lib, should install glfw first or prebuild lib and embed in project
if (WIN32)
target_link_libraries(${PROJECT_NAME}
d3d12.lib
d3dcompiler.lib
dxgi.lib
)
elseif (APPLE)
# mac: brew install glfw3
find_library(OPENGL_LIBRARY OpenGL REQUIRED)
find_library(COCOA_LIBRARY Cocoa REQUIRED)
find_library(IOKIT_LIBRARY IOKit REQUIRED)
find_library(COREVID_LIBRARY CoreVideo REQUIRED)
message(${COCOA_LIBRARY})
message(${IOKIT_LIBRARY})
message(${COREVID_LIBRARY})
target_link_libraries(${PROJECT_NAME}
${OPENGL_LIBRARY}
${COCOA_LIBRARY}
${IOKIT_LIBRARY}
${COREVID_LIBRARY}
glfw # use this lib name
)
elseif (UNIX AND NOT APPLE)
# linux: sudo apt install libglfw3-dev
target_link_libraries(${PROJECT_NAME}
GL
glfw # use this lib name
dl
)
endif()
注意
- windows需要预装directx12,mac和linux需要预装glfw3
- mac和linux共用相同的cpp和链接库写法,链接库有不同
- windows构建完用visual studio编译项目,mac和linux下建议用Qt Creator编译项目
效果