Skip to content

Commit a9c0ee6

Browse files
committed
Support cmake installation
1 parent 1cce4d1 commit a9c0ee6

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

CMakeLists.txt

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@
3737
#
3838
# Todo
3939
# Test build for Windows, Mac and mingw.
40+
#
41+
# Installs the library after build:
42+
# cmake --install path/to/build --prefix path/to/install
43+
#
44+
# Then the target then can be imported by another cmake project like this:
45+
# find_package(godot-cpp CONFIG REQUIRED)
46+
#
47+
# add_library(libfoo SHARED)
48+
# set_target_properties(libfoo PROPERTIES POSITION_INDEPENDENT_CODE ON)
49+
# target_link_libraries(libfoo PUBLIC godot-cpp::godot-cpp)
50+
#
51+
# Users need to provide the directory of the installation:
52+
# cmake -S . -B path/to/build -DCMAKE_PREFIX_PATH=/absolute/path/to/install
4053

4154
cmake_minimum_required(VERSION 3.13)
4255
project(godot-cpp LANGUAGES CXX)
@@ -194,10 +207,11 @@ if (GODOT_CPP_SYSTEM_HEADERS)
194207
set(GODOT_CPP_SYSTEM_HEADERS_ATTRIBUTE SYSTEM)
195208
endif ()
196209

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}
210+
target_include_directories(${PROJECT_NAME} ${GODOT_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
211+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
212+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/gen/include>
213+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${GODOT_GDEXTENSION_DIR}>
214+
$<INSTALL_INTERFACE:include>
201215
)
202216

203217
# Add the compile flags
@@ -226,3 +240,28 @@ set_target_properties(${PROJECT_NAME}
226240
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
227241
OUTPUT_NAME "${OUTPUT_NAME}"
228242
)
243+
244+
include(GNUInstallDirs)
245+
include(CMakePackageConfigHelpers)
246+
247+
set(GODOT_CPP_PACKAGE_NAME godot-cpp) # the find_package name
248+
set(GODOT_CPP_PACKAGE_DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${GODOT_CPP_PACKAGE_NAME}")
249+
250+
configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/config.cmake.in
251+
"${PROJECT_BINARY_DIR}/cmake/${GODOT_CPP_PACKAGE_NAME}-config.cmake"
252+
INSTALL_DESTINATION "${GODOT_CPP_PACKAGE_DESTINATION}"
253+
)
254+
255+
install(FILES ${PROJECT_BINARY_DIR}/cmake/${GODOT_CPP_PACKAGE_NAME}-config.cmake
256+
DESTINATION ${GODOT_CPP_PACKAGE_DESTINATION}
257+
)
258+
259+
install(TARGETS godot-cpp EXPORT godot_cpp_targets)
260+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
261+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
262+
install(FILES ${GODOT_GDEXTENSION_DIR}/gdextension_interface.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
263+
264+
install(EXPORT godot_cpp_targets
265+
NAMESPACE godot-cpp::
266+
FILE ${GODOT_CPP_PACKAGE_NAME}-targets.cmake
267+
DESTINATION "${GODOT_CPP_PACKAGE_DESTINATION}")

cmake/config.cmake.in

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

0 commit comments

Comments
 (0)