Skip to content

Commit 0dba6da

Browse files
committed
Support cmake installation to any directory
1 parent 3f2af2e commit 0dba6da

File tree

2 files changed

+35
-18
lines changed

2 files changed

+35
-18
lines changed

CMakeLists.txt

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,11 @@ if (GODOT_CPP_SYSTEM_HEADERS)
194194
set(GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE SYSTEM)
195195
endif ()
196196

197-
target_include_directories(${PROJECT_NAME} ${GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
198-
include
199-
${CMAKE_CURRENT_BINARY_DIR}/gen/include
200-
${GODOT_GDEXTENSION_DIR}
197+
target_include_directories(${PROJECT_NAME} ${GODOT_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
198+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
199+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/gen/include>
200+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${GODOT_GDEXTENSION_DIR}>
201+
$<INSTALL_INTERFACE:include>
201202
)
202203

203204
# Add the compile flags
@@ -227,26 +228,42 @@ set_target_properties(${PROJECT_NAME}
227228
OUTPUT_NAME "${OUTPUT_NAME}"
228229
)
229230

230-
install(TARGETS ${PROJECT_NAME} EXPORT godot_cpp_targets)
231-
232-
# Export the target to the build directory.
231+
# Export the target to the install directory.
232+
#
233+
# Install after build
234+
# cmake --install build --prefix /path/to/install
235+
#
233236
# The target then can be imported by another cmake project like this:
234237
# find_package(godot-cpp CONFIG REQUIRED)
235238
#
236239
# add_library(libfoo SHARED)
237240
# set_target_properties(libfoo PROPERTIES POSITION_INDEPENDENT_CODE ON)
238-
# target_link_libraries(libfoo PUBLIC godot::godot-cpp)
241+
# target_link_libraries(libfoo PUBLIC godot-cpp::godot-cpp)
239242
#
240-
# And user provides the build directory to cmake:
241-
# -DCMAKE_PREFIX_PATH=<absolute-path-to-godot-cpp-build-dir>.
242-
243-
export(EXPORT godot_cpp_targets
244-
FILE "${PROJECT_BINARY_DIR}/cmake/godot-cpp.cmake"
245-
NAMESPACE godot::
246-
)
243+
# And user provides the install directory to cmake:
244+
# -DCMAKE_PREFIX_PATH=/absolute/path/to/install
247245

246+
include(GNUInstallDirs)
248247
include(CMakePackageConfigHelpers)
248+
249+
set(GODOT_CPP_PACKAGE_NAME godot-cpp) # the find_package name
250+
set(GODOT_CPP_PACKAGE_DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${GODOT_CPP_PACKAGE_NAME}")
251+
249252
configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/config.cmake.in
250-
"${PROJECT_BINARY_DIR}/cmake/godot-cpp-config.cmake"
251-
INSTALL_DESTINATION "lib/cmake/godot-cpp"
253+
"${PROJECT_BINARY_DIR}/cmake/${GODOT_CPP_PACKAGE_NAME}-config.cmake"
254+
INSTALL_DESTINATION "${GODOT_CPP_PACKAGE_DESTINATION}"
255+
)
256+
257+
install(FILES ${PROJECT_BINARY_DIR}/cmake/${GODOT_CPP_PACKAGE_NAME}-config.cmake
258+
DESTINATION ${GODOT_CPP_PACKAGE_DESTINATION}
252259
)
260+
261+
install(TARGETS godot-cpp EXPORT godot_cpp_targets)
262+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
263+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
264+
install(FILES ${GODOT_GDEXTENSION_DIR}/gdextension_interface.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
265+
266+
install(EXPORT godot_cpp_targets
267+
NAMESPACE godot-cpp::
268+
FILE ${GODOT_CPP_PACKAGE_NAME}-targets.cmake
269+
DESTINATION "${GODOT_CPP_PACKAGE_DESTINATION}")

cmake/config.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@PACKAGE_INIT@
22

3-
include("${CMAKE_CURRENT_LIST_DIR}/godot-cpp.cmake")
3+
include("${CMAKE_CURRENT_LIST_DIR}/godot-cpp-targets.cmake")
44

55
check_required_components(godot-cpp)

0 commit comments

Comments
 (0)