Skip to content

Commit 445ad3f

Browse files
authored
Merge pull request #216 from ZZBaron/new-cmake
cmake: enable package manager support with install/export targets
2 parents 7ef2117 + 26a9276 commit 445ad3f

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

CMakeLists.txt

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,64 @@
11
cmake_minimum_required(VERSION 3.20)
2-
32
project(ImGuiFileDialog)
43

5-
add_library(ImGuiFileDialog STATIC
4+
# Option to control installation (disabled by default if used as subproject)
5+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
6+
set(IGFD_INSTALL_DEFAULT ON)
7+
else()
8+
set(IGFD_INSTALL_DEFAULT OFF)
9+
endif()
10+
11+
option(IGFD_INSTALL "Install ImGuiFileDialog library and headers" ${IGFD_INSTALL_DEFAULT})
12+
13+
find_package(imgui QUIET) # fails quietly if not found (imgui is the target name for vcpkg and nixpkgs).
14+
15+
add_library(ImGuiFileDialog
616
ImGuiFileDialog.cpp
717
ImGuiFileDialog.h
818
ImGuiFileDialogConfig.h
919
)
1020

11-
target_include_directories(ImGuiFileDialog PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
21+
if(imgui_FOUND)
22+
target_link_libraries(ImGuiFileDialog PUBLIC imgui::imgui)
23+
message(STATUS "ImGuiFileDialog: Found imgui package, linking automatically")
24+
else()
25+
message(STATUS "ImGuiFileDialog: imgui package not found - ensure ImGui is available in your project")
26+
endif()
27+
28+
# Use generator expressions for proper include directory handling
29+
target_include_directories(ImGuiFileDialog
30+
PUBLIC
31+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
32+
$<INSTALL_INTERFACE:include>
33+
)
1234

1335
if(UNIX)
1436
target_compile_options(ImGuiFileDialog PUBLIC -Wno-unknown-pragmas)
1537
endif()
38+
39+
# Installation configuration
40+
if(IGFD_INSTALL)
41+
include(GNUInstallDirs)
42+
43+
# Install the library
44+
install(TARGETS ImGuiFileDialog
45+
EXPORT ImGuiFileDialogTargets
46+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
47+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
48+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
49+
)
50+
51+
# Install headers
52+
install(FILES
53+
ImGuiFileDialog.h
54+
ImGuiFileDialogConfig.h
55+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
56+
)
57+
58+
# Install export targets
59+
install(EXPORT ImGuiFileDialogTargets
60+
FILE ImGuiFileDialogConfig.cmake
61+
NAMESPACE ImGuiFileDialog::
62+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ImGuiFileDialog
63+
)
64+
endif()

0 commit comments

Comments
 (0)