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)
4344option (GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON )
4445option (GODOT_CPP_SYSTEM_HEADERS "Expose headers as SYSTEM." ON )
4546option (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
4851list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake/" )
@@ -70,7 +73,7 @@ if(NOT DEFINED BITS)
7073endif ()
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 "" )
7477set (GODOT_CUSTOM_API_FILE "" CACHE STRING "" )
7578
7679set (GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR} /extension_api.json" )
@@ -195,9 +198,10 @@ if (GODOT_CPP_SYSTEM_HEADERS)
195198endif ()
196199
197200target_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 ()
0 commit comments