Skip to content

Commit 95c09aa

Browse files
committed
cmake: Copy DLLs with executables on Windows
Subsumes PR #282.
1 parent f177311 commit 95c09aa

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ if(WIN32 AND NOT MINGW)
66
endif()
77
endif()
88

9+
IF(WIN32)
10+
# no permission for the default install prefix %ProgramFiles%
11+
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE STRING "installation path")
12+
ENDIF()
13+
914
IF(NOT DEFINED CMAKE_BUILD_TYPE)
1015
# No effect for multi-configuration generators (e.g. for Visual Studio)
1116
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose: RelWithDebInfo Release Debug MinSizeRel None")
@@ -125,12 +130,18 @@ SET(LIBRARIES
125130
${LIBFREENECT2_THREADING_LIBRARIES}
126131
)
127132

133+
SET(LIBFREENECT2_DLLS
134+
${LibUSB_DLL}
135+
${TurboJPEG_DLL}
136+
)
137+
128138
IF(ENABLE_OPENGL)
129139
FIND_PACKAGE(GLFW3)
130140
FIND_PACKAGE(OpenGL)
131141
IF(GLFW3_FOUND)
132142
INCLUDE_DIRECTORIES(${GLFW3_INCLUDE_DIRS})
133143

144+
LIST(APPEND LIBFREENECT2_DLLS ${GLFW3_DLL})
134145
LIST(APPEND LIBRARIES
135146
${GLFW3_LIBRARIES}
136147
${OPENGL_gl_LIBRARY}

cmake_modules/FindGLFW3.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,17 @@ FIND_LIBRARY(GLFW3_LIBRARIES
5858
${_SUFFIX}
5959
)
6060

61+
IF(WIN32)
62+
FIND_FILE(GLFW3_DLL
63+
glfw3.dll
64+
PATHS
65+
"${DEPENDS_DIR}/glfw"
66+
"$ENV{ProgramW6432}/glfw"
67+
ENV GLFW_ROOT
68+
PATH_SUFFIXES
69+
${_SUFFIX}
70+
)
71+
ENDIF()
72+
6173
INCLUDE(FindPackageHandleStandardArgs)
6274
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLFW3 "Could NOT find GLFW3 - try adding GLFW_ROOT in enviroment variables." GLFW3_LIBRARIES GLFW3_INCLUDE_DIRS)

cmake_modules/FindLibUSB.cmake

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,22 @@ FIND_LIBRARY(LibUSB_LIBRARIES
5353
MS64/dll
5454
)
5555

56+
IF(WIN32)
57+
FIND_FILE(LibUSB_DLL
58+
libusb-1.0.dll
59+
PATHS
60+
"${DEPENDS_DIR}/libusb"
61+
"${DEPENDS_DIR}/libusbx"
62+
ENV LibUSB_ROOT
63+
PATH_SUFFIXES
64+
x64/Release/dll
65+
x64/Debug/dll
66+
Win32/Release/dll
67+
Win32/Debug/dll
68+
MS64
69+
MS64/dll
70+
)
71+
ENDIF()
72+
5673
INCLUDE(FindPackageHandleStandardArgs)
5774
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibUSB DEFAULT_MSG LibUSB_LIBRARIES LibUSB_INCLUDE_DIRS)

cmake_modules/FindTurboJPEG.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,20 @@ FIND_LIBRARY(TurboJPEG_LIBRARIES
3838
lib64
3939
)
4040

41+
IF(WIN32)
42+
FIND_FILE(TurboJPEG_DLL
43+
turbojpeg.dll
44+
DOC "Found TurboJPEG DLL path"
45+
PATHS
46+
"${DEPENDS_DIR}/libjpeg_turbo"
47+
"${DEPENDS_DIR}/libjpeg-turbo64"
48+
"C:/libjpeg-turbo64"
49+
ENV TurboJPEG_ROOT
50+
PATH_SUFFIXES
51+
bin
52+
)
53+
ENDIF()
54+
4155
IF(TurboJPEG_INCLUDE_DIRS AND TurboJPEG_LIBRARIES)
4256
INCLUDE(CheckCSourceCompiles)
4357
set(CMAKE_REQUIRED_INCLUDES ${TurboJPEG_INCLUDE_DIRS})

examples/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ LIST(APPEND CMAKE_MODULE_PATH ${freenect2_ROOT_DIR}/cmake_modules) # FindGLFW3.c
2929
IF(TARGET freenect2)
3030
MESSAGE(STATUS "Using in-tree freenect2 target")
3131
SET(freenect2_LIBRARIES freenect2)
32+
SET(freenect2_DLLS ${LIBFREENECT2_DLLS})
3233
ELSE()
3334
FIND_PACKAGE(freenect2 REQUIRED)
35+
# Out-of-tree build will have to have DLLs manually copied.
3436
ENDIF()
3537

3638
INCLUDE_DIRECTORIES(
@@ -45,6 +47,10 @@ SET(Protonect_LIBRARIES
4547
${freenect2_LIBRARIES}
4648
)
4749

50+
SET(Protonect_DLLS
51+
${freenect2_DLLS}
52+
)
53+
4854
IF(ENABLE_OPENGL)
4955
FIND_PACKAGE(GLFW3)
5056
FIND_PACKAGE(OpenGL)
@@ -54,6 +60,7 @@ IF(ENABLE_OPENGL)
5460
${flextGL_INCLUDE_DIRS}
5561
)
5662

63+
LIST(APPEND Protonect_DLLS ${GLFW3_DLL})
5764
LIST(APPEND Protonect_src
5865
viewer.cpp
5966
${flextGL_SOURCES}
@@ -73,3 +80,14 @@ ADD_EXECUTABLE(Protonect
7380
TARGET_LINK_LIBRARIES(Protonect
7481
${Protonect_LIBRARIES}
7582
)
83+
84+
IF(WIN32)
85+
INSTALL(TARGETS Protonect DESTINATION bin)
86+
LIST(REMOVE_DUPLICATES Protonect_DLLS)
87+
FOREACH(FILEI ${Protonect_DLLS})
88+
ADD_CUSTOM_COMMAND(TARGET Protonect POST_BUILD
89+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILEI} $<TARGET_FILE_DIR:Protonect>
90+
)
91+
ENDFOREACH(FILEI)
92+
INSTALL(FILES ${Protonect_DLLS} DESTINATION bin)
93+
ENDIF()

0 commit comments

Comments
 (0)