|
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