|
6 | 6 | # GODOT_CPP_SYSTEM_HEADERS Mark the header files as SYSTEM. This may be useful to supress warnings in projects including this one.
|
7 | 7 | # GODOT_CPP_WARNING_AS_ERROR Treat any warnings as errors
|
8 | 8 | # 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 |
9 | 10 | # FLOAT_PRECISION: Floating-point precision level ("single", "double")
|
10 | 11 | #
|
11 | 12 | # Android cmake arguments
|
@@ -43,6 +44,8 @@ project(godot-cpp LANGUAGES CXX)
|
43 | 44 | option(GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class's get_node." ON)
|
44 | 45 | option(GODOT_CPP_SYSTEM_HEADERS "Expose headers as SYSTEM." ON)
|
45 | 46 | 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 | + |
46 | 49 |
|
47 | 50 | # Add path to modules
|
48 | 51 | list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
|
@@ -70,7 +73,7 @@ if(NOT DEFINED BITS)
|
70 | 73 | endif()
|
71 | 74 |
|
72 | 75 | # 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 "") |
74 | 77 | set(GODOT_CUSTOM_API_FILE "" CACHE STRING "")
|
75 | 78 |
|
76 | 79 | set(GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR}/extension_api.json")
|
@@ -195,9 +198,10 @@ if (GODOT_CPP_SYSTEM_HEADERS)
|
195 | 198 | endif ()
|
196 | 199 |
|
197 | 200 | 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> |
201 | 205 | )
|
202 | 206 |
|
203 | 207 | # Add the compile flags
|
@@ -226,3 +230,43 @@ set_target_properties(${PROJECT_NAME}
|
226 | 230 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
|
227 | 231 | OUTPUT_NAME "${OUTPUT_NAME}"
|
228 | 232 | )
|
| 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