Skip to content

Commit 1b59336

Browse files
committed
CMake config exporting
1 parent 9d528c3 commit 1b59336

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

CMakeLists.txt

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
# GODOT_CPP_SYSTEM_HEADERS Mark the header files as SYSTEM. This may be useful to supress warnings in projects including this one.
77
# GODOT_CPP_WARNING_AS_ERROR Treat any warnings as errors
88
# GODOT_CUSTOM_API_FILE: Path to a custom GDExtension API JSON file (takes precedence over `gdextension_dir`)
9+
# GODOT_CPP_INSTALL: Enables target install for exporting godot-cpp cmake configuration
910
# FLOAT_PRECISION: Floating-point precision level ("single", "double")
1011
#
1112
# Android cmake arguments
@@ -43,6 +44,8 @@ project(godot-cpp LANGUAGES CXX)
4344
option(GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON)
4445
option(GODOT_CPP_SYSTEM_HEADERS "Expose headers as SYSTEM." ON)
4546
option(GODOT_CPP_WARNING_AS_ERROR "Treat warnings as errors" OFF)
47+
option(GODOT_CPP_INSTALL "Enables target install for exporting godot-cpp cmake configuration" ON)
48+
4649

4750
# Add path to modules
4851
list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
@@ -70,7 +73,7 @@ if(NOT DEFINED BITS)
7073
endif()
7174

7275
# Input from user for GDExtension interface header and the API JSON file
73-
set(GODOT_GDEXTENSION_DIR "gdextension" CACHE STRING "")
76+
set(GODOT_GDEXTENSION_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gdextension" CACHE STRING "")
7477
set(GODOT_CUSTOM_API_FILE "" CACHE STRING "")
7578

7679
set(GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR}/extension_api.json")
@@ -195,9 +198,10 @@ if (GODOT_CPP_SYSTEM_HEADERS)
195198
endif ()
196199

197200
target_include_directories(${PROJECT_NAME} ${GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
198-
include
199-
${CMAKE_CURRENT_BINARY_DIR}/gen/include
200-
${GODOT_GDEXTENSION_DIR}
201+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
202+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/gen/include>
203+
$<BUILD_INTERFACE:${GODOT_GDEXTENSION_DIR}>
204+
$<INSTALL_INTERFACE:include>
201205
)
202206

203207
# Add the compile flags
@@ -226,3 +230,43 @@ set_target_properties(${PROJECT_NAME}
226230
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
227231
OUTPUT_NAME "${OUTPUT_NAME}"
228232
)
233+
234+
if ($CACHE{GODOT_CPP_INSTALL})
235+
install(TARGETS ${PROJECT_NAME}
236+
EXPORT GodotCppTargets
237+
)
238+
239+
install(EXPORT GodotCppTargets
240+
FILE GodotCppTargets.cmake
241+
NAMESPACE godot::
242+
DESTINATION lib/cmake/GodotCpp
243+
)
244+
245+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
246+
DESTINATION include
247+
)
248+
249+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen/include/
250+
DESTINATION include
251+
)
252+
253+
if (GODOT_GDEXTENSION_DIR AND EXISTS ${GODOT_GDEXTENSION_DIR})
254+
install(DIRECTORY ${GODOT_GDEXTENSION_DIR}/
255+
DESTINATION include
256+
)
257+
endif ()
258+
259+
include(CMakePackageConfigHelpers)
260+
261+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GodotCppConfig.cmake.in
262+
"${CMAKE_CURRENT_BINARY_DIR}/GodotCppConfig.cmake"
263+
INSTALL_DESTINATION "lib/cmake/GodotCpp"
264+
NO_SET_AND_CHECK_MACRO
265+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
266+
)
267+
268+
install(FILES
269+
${CMAKE_CURRENT_BINARY_DIR}/GodotCppConfig.cmake
270+
DESTINATION lib/cmake/GodotCpp
271+
)
272+
endif ()

cmake/GodotCppConfig.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/GodotCppTargets.cmake")

0 commit comments

Comments
 (0)